commit 52e9dc828b2750e1ef453e5d79d1f70822924c06 Author: Giulio De Pasquale Date: Thu Dec 13 18:39:52 2018 +0000 dindon diff --git a/api-docs/Architecture_c++.html b/api-docs/Architecture_c++.html new file mode 100644 index 0000000..0189709 --- /dev/null +++ b/api-docs/Architecture_c++.html @@ -0,0 +1,245 @@ + + + + + + + + + + + Architecture — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Architecture

+
+

Warning

+

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

+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/BinaryView_c++.html b/api-docs/BinaryView_c++.html new file mode 100644 index 0000000..39eace0 --- /dev/null +++ b/api-docs/BinaryView_c++.html @@ -0,0 +1,245 @@ + + + + + + + + + + + BinaryView — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

BinaryView

+
+

Warning

+

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

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

Console Logging

+
+

BNLogLevel

+
+

Warning

+

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

+
+
+
+

Log

+
+

Warning

+

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

+
+
+
+

LogDebug

+
+

Warning

+

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

+
+
+
+

LogInfo

+
+

Warning

+

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

+
+
+
+

LogWarn

+
+

Warning

+

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

+
+
+
+

LogError

+
+

Warning

+

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

+
+
+
+

LogAlert

+
+

Warning

+

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

+
+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/Platform_c++.html b/api-docs/Platform_c++.html new file mode 100644 index 0000000..ddad9fb --- /dev/null +++ b/api-docs/Platform_c++.html @@ -0,0 +1,245 @@ + + + + + + + + + + + Platform — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Platform

+
+

Warning

+

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

+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_modules/binaryninja.html b/api-docs/_modules/binaryninja.html new file mode 100644 index 0000000..bede247 --- /dev/null +++ b/api-docs/_modules/binaryninja.html @@ -0,0 +1,491 @@ + + + + + + + + + + + binaryninja — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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', (), {})
+ + +
[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", +# ] +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.setting import * +from binaryninja.metadata 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", ...), dynamicly 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() + +bundled_plugin_path = core.BNGetBundledPluginDirectory() +user_plugin_path = core.BNGetUserPluginDirectory() + +core_version = core.BNGetVersionString() +'''Core version''' + +core_build_id = core.BNGetBuildId() +'''Build ID''' + +core_serial = core.BNGetSerialNumber() +'''Serial Number''' + +core_expires = gmtime(core.BNGetLicenseExpirationTime()) +'''License Expiration''' + +core_product = core.BNGetProduct() +'''Product string from the license file''' + +core_product_type = core.BNGetProductType() +'''Product type from the license file''' + +core_license_count = core.BNGetLicenseCount() +'''License count from the license file''' +
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_modules/binaryninja/architecture.html b/api-docs/_modules/binaryninja/architecture.html new file mode 100644 index 0000000..23b5daf --- /dev/null +++ b/api-docs/_modules/binaryninja/architecture.html @@ -0,0 +1,2949 @@ + + + + + + + + + + + binaryninja.architecture — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.architecture

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+
+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 = (core.BNInstructionTextToken * len(tokens))() + for i in range(0, len(tokens)): + if isinstance(tokens[i].type, str): + token_buf[i].type = InstructionTextTokenType[tokens[i].type] + else: + token_buf[i].type = tokens[i].type + token_buf[i].text = tokens[i].text + token_buf[i].value = tokens[i].value + token_buf[i].size = tokens[i].size + token_buf[i].operand = tokens[i].operand + token_buf[i].context = tokens[i].context + token_buf[i].confidence = tokens[i].confidence + token_buf[i].address = tokens[i].address + 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
+ + @abc.abstractmethod +
[docs] 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 branche types for the given instruction + :rtype: InstructionInfo + """ + raise NotImplementedError
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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)
+ + @abc.abstractmethod +
[docs] 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)
+ + @abc.abstractmethod +
[docs] 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()
+ + @abc.abstractmethod +
[docs] 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"
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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
+ + @abc.abstractmethod +
[docs] 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 shoulde 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 flage 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 or error string + :rtype: (a tuple of instructions and empty string) or (or None and error string) + :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) + 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 shoulde 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) + """ + 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 = [] + for i in range(0, count.value): + token_type = InstructionTextTokenType(tokens[i].type) + text = tokens[i].text + value = tokens[i].value + size = tokens[i].size + operand = tokens[i].operand + context = tokens[i].context + confidence = tokens[i].confidence + address = tokens[i].address + result.append(binaryninja.function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + 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 'str' + :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): + raise ValueError("Could not assemble") + 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/api-docs/_modules/binaryninja/basicblock.html b/api-docs/_modules/binaryninja/basicblock.html new file mode 100644 index 0000000..d83f456 --- /dev/null +++ b/api-docs/_modules/binaryninja/basicblock.html @@ -0,0 +1,633 @@ + + + + + + + + + + + binaryninja.basicblock — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.basicblock

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+# 2-3 compatibility
+from binaryninja import range
+
+
+
[docs]class BasicBlockEdge(object): +
[docs] def __init__(self, branch_type, source, target, back_edge): + self.type = branch_type + self.source = source + self.target = target + self.back_edge = back_edge
+ + def __eq__(self, value): + if not isinstance(value, BasicBlockEdge): + return False + return (self.type, self.source, self.target, self.back_edge) == (value.type, value.source, value.target, value.back_edge) + + def __hash__(self): + return hash((self.type, self.source, self.target, self.back_edge)) + + 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, view, handle): + self.view = view + self.handle = core.handle_of_type(handle, core.BNBasicBlock) + self._arch = None + self._func = 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 _create_instance(self, view, handle): + """Internal method used to instantiante child instances""" + return BasicBlock(view, handle) + + def __hash__(self): + return hash((self.start, self.end, self.arch.name)) + + @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 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 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(self.view, core.BNNewBasicBlockReference(edges[i].target)) + else: + target = None + result.append(BasicBlockEdge(branch_type, self, target, edges[i].backEdge)) + 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(self.view, core.BNNewBasicBlockReference(edges[i].target)) + else: + target = None + result.append(BasicBlockEdge(branch_type, target, self, edges[i].backEdge)) + 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(self.view, core.BNNewBasicBlockReference(blocks[i]))) + 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(self.view, core.BNNewBasicBlockReference(blocks[i]))) + 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(self.view, result) + + @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(self.view, core.BNNewBasicBlockReference(blocks[i]))) + 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(self.view, core.BNNewBasicBlockReference(blocks[i]))) + 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> + """ + color = core.BNGetBasicBlockHighlight(self.handle) + 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) + + @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) + + @classmethod +
[docs] 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(blocks[0].view, core.BNNewBasicBlockReference(out_blocks[i]))) + core.BNFreeBasicBlockList(out_blocks, 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 __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): + start = self.start + end = self.end + + idx = start + while idx < end: + data = self.view.read(idx, self.arch.max_instr_length) + inst_info = self.arch.get_instruction_info(data, idx) + inst_text = self.arch.get_instruction_text(data, idx) + + if inst_info is None: + break + yield inst_text + idx += inst_info.length + +
[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 + tokens = [] + for j in range(0, lines[i].count): + token_type = InstructionTextTokenType(lines[i].tokens[j].type) + text = lines[i].tokens[j].text + value = lines[i].tokens[j].value + size = lines[i].tokens[j].size + operand = lines[i].tokens[j].operand + context = lines[i].tokens[j].context + confidence = lines[i].tokens[j].confidence + address = lines[i].tokens[j].address + tokens.append(binaryninja.function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + result.append(binaryninja.function.DisassemblyTextLine(addr, tokens, il_instr)) + 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/api-docs/_modules/binaryninja/binaryview.html b/api-docs/_modules/binaryninja/binaryview.html new file mode 100644 index 0000000..36b7432 --- /dev/null +++ b/api-docs/_modules/binaryninja/binaryview.html @@ -0,0 +1,4377 @@ + + + + + + + + + + + binaryninja.binaryview — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.binaryview

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import (AnalysisState, SymbolType, InstructionTextTokenType,
+	Endianness, ModificationStatus, StringType, SegmentFlag, SectionSemantics)
+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
+
+# 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 responcibility 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): + self.address = addr + self.type = var_type + self.auto_discovered = auto_discovered
+ + 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)) + 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)) + 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)) + 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)
+ + @classmethod +
[docs] def get_view_of_file(cls, filename, update_analysis=True): + """ + ``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. + :return: returns a BinaryView object for the given filename. + :rtype: BinaryView or None + """ + sqlite = "SQLite format 3" + if filename.endswith(".bndb"): + f = open(filename, 'r') + if f is None or f.read(len(sqlite)) != sqlite: + return None + f.close() + view = binaryninja.filemetadata.FileMetadata().open_existing_database(filename) + 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(None, plat)
+ + +
[docs]class Segment(object): +
[docs] def __init__(self, start, length, data_offset, data_length, flags, auto_defined): + self.start = start + self.length = length + self.data_offset = data_offset + self.data_length = data_length + self.flags = flags + self.auto_defined = auto_defined
+ + @property + def executable(self): + return (self.flags & SegmentFlag.SegmentExecutable) != 0 + + @property + def writable(self): + return (self.flags & SegmentFlag.SegmentWritable) != 0 + + @property + def readable(self): + return (self.flags & SegmentFlag.SegmentReadable) != 0 + + @property + def end(self): + return self.start + self.length + + def __len__(self): + return self.length + + 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, name, section_type, start, length, linked_section, info_section, info_data, align, entry_size, semantics, auto_defined): + self.name = name + self.type = section_type + self.start = start + self.length = length + self.linked_section = linked_section + self.info_section = info_section + self.info_data = info_data + self.align = align + self.entry_size = entry_size + self.semantics = SectionSemantics(semantics) + self.auto_defined = auto_defined
+ + @property + def end(self): + return self.start + self.length + + def __len__(self): + return self.length + + 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. Additionanlly, 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 = {} + +
[docs] def __init__(self, file_metadata=None, parent_view=None, handle=None): + 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.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.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) + + @classmethod +
[docs] 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 + + @classmethod +
[docs] 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
+ + @classmethod +
[docs] 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] + + @classmethod +
[docs] 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.medium_level_il.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() + 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) + result = {} + for i in range(0, count.value): + sym = types.Symbol(None, None, None, handle=core.BNNewSymbolReference(syms[i])) + result[sym.raw_name] = sym + core.BNFreeSymbolList(syms, 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): + """Relevant analysis information with list of functions under active analysis (read-only)""" + info_ref = core.BNGetAnalysisInfo(self.handle) + info = info_ref[0] + active_info_list = [] + for i in xrange(0, info.count): + func = 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) + 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(segment_list[i].start, segment_list[i].length, + segment_list[i].dataOffset, segment_list[i].dataLength, segment_list[i].flags, segment_list[i].autoDefined)) + core.BNFreeSegmentList(segment_list) + 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[section_list[i].name] = Section(section_list[i].name, section_list[i].type, section_list[i].start, + section_list[i].length, section_list[i].linkedSection, section_list[i].infoSection, + section_list[i].infoData, section_list[i].align, section_list[i].entrySize, + section_list[i].semantics, section_list[i].autoDefined) + 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) + + 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 _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
+ + @abc.abstractmethod +
[docs] 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 implmented 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 assocated 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 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' + >>> + """ + self.file.undo()
+ +
[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' + >>> + """ + self.file.redo()
+ +
[docs] def navigate(self, view, offset): + 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\' + """ + 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): + raise TypeError("Must be bytes") + 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_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_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)
+ +
[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(self, core.BNNewBasicBlockReference(blocks[i]))) + 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(self, core.BNNewBasicBlockReference(blocks[i]))) + 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(self, block)
+ +
[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_symbol_at(self, addr): + """ + ``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 + :rtype: Symbol + :Example: + + >>> bv.get_symbol_at(bv.entry_point) + <FunctionSymbol: "_start" @ 0x100001174> + >>> + """ + sym = core.BNGetSymbolByAddress(self.handle, addr) + if sym is None: + return None + return types.Symbol(None, None, None, handle = sym)
+ +
[docs] def get_symbol_by_raw_name(self, name): + """ + ``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 + :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> + >>> + """ + sym = core.BNGetSymbolByRawName(self.handle, name) + if sym is None: + return None + return types.Symbol(None, None, None, handle = sym)
+ +
[docs] def get_symbols_by_name(self, name): + """ + ``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 + :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>] + >>> + """ + count = ctypes.c_ulonglong(0) + syms = core.BNGetSymbolsByName(self.handle, name, 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 get_symbols(self, start = None, length = 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 start is None: + syms = core.BNGetSymbols(self.handle, count) + else: + syms = core.BNGetSymbolsInRange(self.handle, 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 get_symbols_of_type(self, sym_type, start = None, length = 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] + count = ctypes.c_ulonglong(0) + if start is None: + syms = core.BNGetSymbolsOfType(self.handle, sym_type, count) + 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. + + .. 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 conver to nops + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True on success, False on falure. + :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 falure. + :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 falure. + :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 falure. + :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 equivilent 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 falure. + :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 resposible 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 instantied :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(self, pos.block) + 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(self, core.BNNewBasicBlockReference(lines[i].block)) + addr = lines[i].contents.addr + tokens = [] + for j in range(0, lines[i].contents.count): + token_type = InstructionTextTokenType(lines[i].contents.tokens[j].type) + text = lines[i].contents.tokens[j].text + value = lines[i].contents.tokens[j].value + size = lines[i].contents.tokens[j].size + operand = lines[i].contents.tokens[j].operand + context = lines[i].contents.tokens[j].context + confidence = lines[i].contents.tokens[j].confidence + address = lines[i].contents.tokens[j].address + tokens.append(binaryninja.function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + contents = binaryninja.function.DisassemblyTextLine(addr, tokens) + 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(self, pos_obj.block) + 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 dissassembly 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 indentifier 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 = 0): + """ + ``find_next_data`` searchs for the bytes in data starting at the virtual address ``start`` either, case-sensitive, + or case-insensitive. + + :param int start: virtual address to start searching from. + :param str data: bytes to search for + :param FindFlags flags: case-sensitivity flag, one of the following: + + ==================== ====================== + FindFlags Description + ==================== ====================== + NoFindFlags Case-sensitive find + FindCaseInsensitive Case-insensitive find + ==================== ====================== + """ + 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 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 = ""): + core.BNShowMarkdownReport(self.handle, title, contents, plaintext)
+ +
[docs] def show_html_report(self, title, contents, plaintext = ""): + core.BNShowHTMLReport(self.handle, title, contents, plaintext)
+ +
[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): + segment = core.BNSegment() + if not core.BNGetSegmentAt(self.handle, addr, segment): + return None + result = Segment(segment.start, segment.length, segment.dataOffset, segment.dataLength, + segment.flags, segment.autoDefined) + return result
+ +
[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(section_list[i].name, section_list[i].type, section_list[i].start, + section_list[i].length, section_list[i].linkedSection, section_list[i].infoSection, + section_list[i].infoData, section_list[i].align, section_list[i].entrySize, + section_list[i].semantics, section_list[i].autoDefined)) + core.BNFreeSectionList(section_list, count.value) + return result
+ +
[docs] def get_section_by_name(self, name): + section = core.BNSection() + if not core.BNGetSectionByName(self.handle, name, section): + return None + result = Section(section.name, section.type, section.start, section.length, section.linkedSection, + section.infoSection, section.infoData, section.align, section.entrySize, section.semantics, + section.autoDefined) + core.BNFreeSection(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 reopend. 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' + """ + core.BNBinaryViewStoreMetadata(self.handle, key, metadata.Metadata(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]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 offet 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 offet 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 offet 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 offet 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 offet 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 offet 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 offet 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 offet 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 offet 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 offet 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)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_modules/binaryninja/callingconvention.html b/api-docs/_modules/binaryninja/callingconvention.html new file mode 100644 index 0000000..ce94dee --- /dev/null +++ b/api-docs/_modules/binaryninja/callingconvention.html @@ -0,0 +1,663 @@ + + + + + + + + + + + binaryninja.callingconvention — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.callingconvention

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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 = [] + 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: + 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.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.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): + 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_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(binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func)), + 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(binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func)), + 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(binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func)), + 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(binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func)), + 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/api-docs/_modules/binaryninja/databuffer.html b/api-docs/_modules/binaryninja/databuffer.html new file mode 100644 index 0000000..7214376 --- /dev/null +++ b/api-docs/_modules/binaryninja/databuffer.html @@ -0,0 +1,399 @@ + + + + + + + + + + + binaryninja.databuffer — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.databuffer

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+
+
[docs]class DataBuffer(object): +
[docs] def __init__(self, contents="", handle=None): + + # python3 no longer has longs + try: + long + except NameError: + long = int + + 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/api-docs/_modules/binaryninja/demangle.html b/api-docs/_modules/binaryninja/demangle.html new file mode 100644 index 0000000..393b438 --- /dev/null +++ b/api-docs/_modules/binaryninja/demangle.html @@ -0,0 +1,329 @@ + + + + + + + + + + + binaryninja.demangle — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.demangle

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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 provied 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/api-docs/_modules/binaryninja/downloadprovider.html b/api-docs/_modules/binaryninja/downloadprovider.html new file mode 100644 index 0000000..9409609 --- /dev/null +++ b/api-docs/_modules/binaryninja/downloadprovider.html @@ -0,0 +1,513 @@ + + + + + + + + + + + binaryninja.downloadprovider — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.downloadprovider

+# Copyright (c) 2015-2018 Vector 35 LLC
+#
+# 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
+from binaryninja.setting import Setting
+from binaryninja import with_metaclass
+from binaryninja import startup
+from binaryninja import log
+
+# 2-3 compatibility
+from binaryninja import pyNativeStr
+
+
+
[docs]class DownloadInstance(object): +
[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) + else: + self.handle = core.handle_of_type(handle, core.BNDownloadInstance) + self._outputCallbacks = None
+ + def __del__(self): + core.BNFreeDownloadInstance(self.handle) + + def _destroy_instance(self, ctxt): + try: + 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 + + @abc.abstractmethod +
[docs] 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)""" + startup._init_plugins() + count = ctypes.c_ulonglong() + types = core.BNGetDownloadProviderList(count) + result = [] + for i in xrange(0, count.value): + result.append(DownloadProvider(types[i])) + core.BNFreeDownloadProviderList(types) + return result + + def __iter__(self): + startup._init_plugins() + count = ctypes.c_ulonglong() + types = core.BNGetDownloadProviderList(count) + try: + for i in xrange(0, count.value): + yield DownloadProvider(types[i]) + finally: + core.BNFreeDownloadProviderList(types) + + def __getitem__(self, value): + startup._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.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 = Setting('download-client').get_string('https-proxy') + 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 = "DefaultDownloadProvider" + instance_class = PythonDownloadInstance + + PythonDownloadProvider().register() +else: + try: + import requests + from requests import pyopenssl +
[docs] class PythonDownloadInstance(DownloadInstance): +
[docs] def __init__(self, provider): + super(PythonDownloadInstance, self).__init__(provider)
+ + @abc.abstractmethod +
[docs] def perform_destroy_instance(self): + pass
+ + @abc.abstractmethod +
[docs] def perform_request(self, url): + try: + proxy_setting = Setting('download-client').get_string('https-proxy') + 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 = "DefaultDownloadProvider" + instance_class = PythonDownloadInstance
+ + PythonDownloadProvider().register() + except ImportError: + if sys.platform == "win32": + log.log_error("Provided Python version is too old! Only Python 2.7.10 and above are known to work on Windows!") + 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/api-docs/_modules/binaryninja/enums.html b/api-docs/_modules/binaryninja/enums.html new file mode 100644 index 0000000..d3e4bc2 --- /dev/null +++ b/api-docs/_modules/binaryninja/enums.html @@ -0,0 +1,1054 @@ + + + + + + + + + + + binaryninja.enums — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

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
+ + +
[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 + GroupLinearDisassemblyFunctions = 64 + ShowFlagUsage = 128
+ + +
[docs]class Endianness(enum.IntEnum): + LittleEndian = 0 + BigEndian = 1
+ + +
[docs]class FindFlag(enum.IntEnum): + NoFindFlags = 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 + CodeSymbolToken = 64 + DataSymbolToken = 65 + LocalVariableToken = 66 + ImportToken = 67 + AddressDisplayToken = 68 + IndirectImportToken = 69
+ + +
[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_FLOAT_CONST = 18 + LLIL_FLAG = 19 + LLIL_FLAG_BIT = 20 + LLIL_ADD = 21 + LLIL_ADC = 22 + LLIL_SUB = 23 + LLIL_SBB = 24 + LLIL_AND = 25 + LLIL_OR = 26 + LLIL_XOR = 27 + LLIL_LSL = 28 + LLIL_LSR = 29 + LLIL_ASR = 30 + LLIL_ROL = 31 + LLIL_RLC = 32 + LLIL_ROR = 33 + LLIL_RRC = 34 + LLIL_MUL = 35 + LLIL_MULU_DP = 36 + LLIL_MULS_DP = 37 + LLIL_DIVU = 38 + LLIL_DIVU_DP = 39 + LLIL_DIVS = 40 + LLIL_DIVS_DP = 41 + LLIL_MODU = 42 + LLIL_MODU_DP = 43 + LLIL_MODS = 44 + LLIL_MODS_DP = 45 + LLIL_NEG = 46 + LLIL_NOT = 47 + LLIL_SX = 48 + LLIL_ZX = 49 + LLIL_LOW_PART = 50 + LLIL_JUMP = 51 + LLIL_JUMP_TO = 52 + LLIL_CALL = 53 + LLIL_CALL_STACK_ADJUST = 54 + LLIL_TAILCALL = 55 + LLIL_RET = 56 + LLIL_NORET = 57 + LLIL_IF = 58 + LLIL_GOTO = 59 + LLIL_FLAG_COND = 60 + LLIL_FLAG_GROUP = 61 + LLIL_CMP_E = 62 + LLIL_CMP_NE = 63 + LLIL_CMP_SLT = 64 + LLIL_CMP_ULT = 65 + LLIL_CMP_SLE = 66 + LLIL_CMP_ULE = 67 + LLIL_CMP_SGE = 68 + LLIL_CMP_UGE = 69 + LLIL_CMP_SGT = 70 + LLIL_CMP_UGT = 71 + LLIL_TEST_BIT = 72 + LLIL_BOOL_TO_INT = 73 + LLIL_ADD_OVERFLOW = 74 + LLIL_SYSCALL = 75 + LLIL_BP = 76 + LLIL_TRAP = 77 + LLIL_INTRINSIC = 78 + LLIL_UNDEF = 79 + LLIL_UNIMPL = 80 + LLIL_UNIMPL_MEM = 81 + LLIL_FADD = 82 + LLIL_FSUB = 83 + LLIL_FMUL = 84 + LLIL_FDIV = 85 + LLIL_FSQRT = 86 + LLIL_FNEG = 87 + LLIL_FABS = 88 + LLIL_FLOAT_TO_INT = 89 + LLIL_INT_TO_FLOAT = 90 + LLIL_FLOAT_CONV = 91 + LLIL_ROUND_TO_INT = 92 + LLIL_FLOOR = 93 + LLIL_CEIL = 94 + LLIL_FTRUNC = 95 + LLIL_FCMP_E = 96 + LLIL_FCMP_NE = 97 + LLIL_FCMP_LT = 98 + LLIL_FCMP_LE = 99 + LLIL_FCMP_GE = 100 + LLIL_FCMP_GT = 101 + LLIL_FCMP_O = 102 + LLIL_FCMP_UO = 103 + LLIL_SET_REG_SSA = 104 + LLIL_SET_REG_SSA_PARTIAL = 105 + LLIL_SET_REG_SPLIT_SSA = 106 + LLIL_SET_REG_STACK_REL_SSA = 107 + LLIL_SET_REG_STACK_ABS_SSA = 108 + LLIL_REG_SPLIT_DEST_SSA = 109 + LLIL_REG_STACK_DEST_SSA = 110 + LLIL_REG_SSA = 111 + LLIL_REG_SSA_PARTIAL = 112 + LLIL_REG_SPLIT_SSA = 113 + LLIL_REG_STACK_REL_SSA = 114 + LLIL_REG_STACK_ABS_SSA = 115 + LLIL_REG_STACK_FREE_REL_SSA = 116 + LLIL_REG_STACK_FREE_ABS_SSA = 117 + LLIL_SET_FLAG_SSA = 118 + LLIL_FLAG_SSA = 119 + LLIL_FLAG_BIT_SSA = 120 + LLIL_CALL_SSA = 121 + LLIL_SYSCALL_SSA = 122 + LLIL_TAILCALL_SSA = 123 + LLIL_CALL_PARAM = 124 + LLIL_CALL_STACK_SSA = 125 + LLIL_CALL_OUTPUT_SSA = 126 + LLIL_LOAD_SSA = 127 + LLIL_STORE_SSA = 128 + LLIL_INTRINSIC_SSA = 129 + LLIL_REG_PHI = 130 + LLIL_REG_STACK_PHI = 131 + LLIL_FLAG_PHI = 132 + LLIL_MEM_PHI = 133
+ + +
[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_FLOAT_CONST = 15 + MLIL_IMPORT = 16 + MLIL_ADD = 17 + MLIL_ADC = 18 + MLIL_SUB = 19 + MLIL_SBB = 20 + MLIL_AND = 21 + MLIL_OR = 22 + MLIL_XOR = 23 + MLIL_LSL = 24 + MLIL_LSR = 25 + MLIL_ASR = 26 + MLIL_ROL = 27 + MLIL_RLC = 28 + MLIL_ROR = 29 + MLIL_RRC = 30 + MLIL_MUL = 31 + MLIL_MULU_DP = 32 + MLIL_MULS_DP = 33 + MLIL_DIVU = 34 + MLIL_DIVU_DP = 35 + MLIL_DIVS = 36 + MLIL_DIVS_DP = 37 + MLIL_MODU = 38 + MLIL_MODU_DP = 39 + MLIL_MODS = 40 + MLIL_MODS_DP = 41 + MLIL_NEG = 42 + MLIL_NOT = 43 + MLIL_SX = 44 + MLIL_ZX = 45 + MLIL_LOW_PART = 46 + MLIL_JUMP = 47 + MLIL_JUMP_TO = 48 + MLIL_CALL = 49 + MLIL_CALL_UNTYPED = 50 + MLIL_CALL_OUTPUT = 51 + MLIL_CALL_PARAM = 52 + MLIL_RET = 53 + MLIL_NORET = 54 + MLIL_IF = 55 + MLIL_GOTO = 56 + MLIL_CMP_E = 57 + MLIL_CMP_NE = 58 + MLIL_CMP_SLT = 59 + MLIL_CMP_ULT = 60 + MLIL_CMP_SLE = 61 + MLIL_CMP_ULE = 62 + MLIL_CMP_SGE = 63 + MLIL_CMP_UGE = 64 + MLIL_CMP_SGT = 65 + MLIL_CMP_UGT = 66 + MLIL_TEST_BIT = 67 + MLIL_BOOL_TO_INT = 68 + MLIL_ADD_OVERFLOW = 69 + MLIL_SYSCALL = 70 + MLIL_SYSCALL_UNTYPED = 71 + MLIL_TAILCALL = 72 + MLIL_TAILCALL_UNTYPED = 73 + MLIL_INTRINSIC = 74 + MLIL_FREE_VAR_SLOT = 75 + MLIL_BP = 76 + MLIL_TRAP = 77 + MLIL_UNDEF = 78 + MLIL_UNIMPL = 79 + MLIL_UNIMPL_MEM = 80 + MLIL_FADD = 81 + MLIL_FSUB = 82 + MLIL_FMUL = 83 + MLIL_FDIV = 84 + MLIL_FSQRT = 85 + MLIL_FNEG = 86 + MLIL_FABS = 87 + MLIL_FLOAT_TO_INT = 88 + MLIL_INT_TO_FLOAT = 89 + MLIL_FLOAT_CONV = 90 + MLIL_ROUND_TO_INT = 91 + MLIL_FLOOR = 92 + MLIL_CEIL = 93 + MLIL_FTRUNC = 94 + MLIL_FCMP_E = 95 + MLIL_FCMP_NE = 96 + MLIL_FCMP_LT = 97 + MLIL_FCMP_LE = 98 + MLIL_FCMP_GE = 99 + MLIL_FCMP_GT = 100 + MLIL_FCMP_O = 101 + MLIL_FCMP_UO = 102 + MLIL_SET_VAR_SSA = 103 + MLIL_SET_VAR_SSA_FIELD = 104 + MLIL_SET_VAR_SPLIT_SSA = 105 + MLIL_SET_VAR_ALIASED = 106 + MLIL_SET_VAR_ALIASED_FIELD = 107 + MLIL_VAR_SSA = 108 + MLIL_VAR_SSA_FIELD = 109 + MLIL_VAR_ALIASED = 110 + MLIL_VAR_ALIASED_FIELD = 111 + MLIL_VAR_SPLIT_SSA = 112 + MLIL_CALL_SSA = 113 + MLIL_CALL_UNTYPED_SSA = 114 + MLIL_SYSCALL_SSA = 115 + MLIL_SYSCALL_UNTYPED_SSA = 116 + MLIL_TAILCALL_SSA = 117 + MLIL_TAILCALL_UNTYPED_SSA = 118 + MLIL_CALL_PARAM_SSA = 119 + MLIL_CALL_OUTPUT_SSA = 120 + MLIL_LOAD_SSA = 121 + MLIL_LOAD_STRUCT_SSA = 122 + MLIL_STORE_SSA = 123 + MLIL_STORE_STRUCT_SSA = 124 + MLIL_INTRINSIC_SSA = 125 + MLIL_FREE_VAR_SLOT_SSA = 126 + MLIL_VAR_PHI = 127 + MLIL_MEM_PHI = 128
+ + +
[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 + StackFrameOffset = 4 + ReturnAddressValue = 5 + ImportedAddressValue = 6 + SignedRangeValue = 7 + UnsignedRangeValue = 8 + LookupTableValue = 9 + InSetOfValues = 10 + NotInSetOfValues = 11
+ + +
[docs]class ScriptingProviderExecuteResult(enum.IntEnum): + InvalidScriptInput = 0 + IncompleteScriptInput = 1 + SuccessfulScriptExecution = 2
+ + +
[docs]class ScriptingProviderInputReadyState(enum.IntEnum): + NotReadyForInput = 0 + ReadyForScriptExecution = 1 + ReadyForScriptProgramInput = 2
+ + +
[docs]class SectionSemantics(enum.IntEnum): + DefaultSectionSemantics = 0 + ReadOnlyCodeSectionSemantics = 1 + ReadOnlyDataSectionSemantics = 2 + ReadWriteDataSectionSemantics = 3
+ + +
[docs]class SegmentFlag(enum.IntEnum): + SegmentExecutable = 1 + SegmentWritable = 2 + SegmentReadable = 4 + SegmentContainsData = 8 + SegmentContainsCode = 16 + SegmentDenyWrite = 32 + SegmentDenyExecute = 64
+ + +
[docs]class StringType(enum.IntEnum): + AsciiString = 0 + Utf16String = 1 + Utf32String = 2
+ + +
[docs]class StructureType(enum.IntEnum): + ClassStructureType = 0 + StructStructureType = 1 + UnionStructureType = 2
+ + +
[docs]class SymbolType(enum.IntEnum): + FunctionSymbol = 0 + ImportAddressSymbol = 1 + ImportedFunctionSymbol = 2 + DataSymbol = 3 + ImportedDataSymbol = 4
+ + +
[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
+ + +
[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/api-docs/_modules/binaryninja/fileaccessor.html b/api-docs/_modules/binaryninja/fileaccessor.html new file mode 100644 index 0000000..8c78fc0 --- /dev/null +++ b/api-docs/_modules/binaryninja/fileaccessor.html @@ -0,0 +1,328 @@ + + + + + + + + + + + binaryninja.fileaccessor — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.fileaccessor

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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/api-docs/_modules/binaryninja/filemetadata.html b/api-docs/_modules/binaryninja/filemetadata.html new file mode 100644 index 0000000..7a1efef --- /dev/null +++ b/api-docs/_modules/binaryninja/filemetadata.html @@ -0,0 +1,592 @@ + + + + + + + + + + + binaryninja.filemetadata — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.filemetadata

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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] + + @classmethod +
[docs] def set_default_session_data(cls, name, value): + _FileMetadataAssociatedDataStore.set_default(name, value)
+ + @property + def filename(self): + """The name of the file (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/api-docs/_modules/binaryninja/function.html b/api-docs/_modules/binaryninja/function.html new file mode 100644 index 0000000..f0031df --- /dev/null +++ b/api-docs/_modules/binaryninja/function.html @@ -0,0 +1,2409 @@ + + + + + + + + + + + binaryninja.function — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.function

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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 + + @classmethod +
[docs] def undetermined(self): + return RegisterValue()
+ + @classmethod +
[docs] def entry_value(self, arch, reg): + result = RegisterValue() + result.type = RegisterValueType.EntryValue + result.arch = arch + result.reg = reg + return result
+ + @classmethod +
[docs] def constant(self, value): + result = RegisterValue() + result.type = RegisterValueType.ConstantValue + result.value = value + result.is_constant = True + return result
+ + @classmethod +
[docs] def constant_ptr(self, value): + result = RegisterValue() + result.type = RegisterValueType.ConstantPointerValue + result.value = value + result.is_constant = True + return result
+ + @classmethod +
[docs] def stack_frame_offset(self, offset): + result = RegisterValue() + result.type = RegisterValueType.StackFrameOffset + result.offset = offset + return result
+ + @classmethod +
[docs] def imported_address(self, value): + result = RegisterValue() + result.type = RegisterValueType.ImportedAddressValue + result.value = value + return result
+ + @classmethod +
[docs] 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 self.values)) + if self.type == RegisterValueType.NotInSetOfValues: + return "<not in set(%s)>" % '[{}]'.format(', '.join(hex(i) for i in 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
+ + @classmethod +
[docs] 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): + 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, handle): + self._view = view + self.handle = core.handle_of_type(handle, core.BNFunction) + self._advanced_analysis_requests = 0 + self._arch = None + self._platform = None
+ + def __del__(self): + 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)) + + @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] + + @classmethod +
[docs] 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(None, 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(self._view, core.BNNewBasicBlockReference(blocks[i]))) + 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): + """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): + """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): + sc = core.BNSizeWithConfidence() + sc.value = int(value) + if hasattr(value, 'confidence'): + sc.confidence = value.confidence + else: + sc.confidence = types.max_confidence + core.BNSetUserFunctionStackAdjustment(self.handle, sc) + + @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.low_level_il: + yield block + + @property + def mlil_basic_blocks(self): + """A generator of all MediumLevelILBasicBlock objects in the current function""" + for block in self.medium_level_il: + 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): + """A generator of llil instructions of the current function""" + for block in self.llil_basic_blocks: + for i in block: + yield i + + @property + def mlil_instructions(self): + """A generator of mlil instructions of the current function""" + for block in self.mlil_basic_blocks: + for i in block: + yield i + + @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) + + 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(self._view, core.BNNewBasicBlockReference(blocks[i])) + 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 + +
[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 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.low_level_il): + return None + + return self.low_level_il[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): + return FunctionGraph(self._view, core.BNCreateFunctionGraph(self.handle))
+ +
[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(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
+ +
[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(0, count.value): + tokens = [] + for j in range(0, lines[i].count): + token_type = InstructionTextTokenType(lines[i].tokens[j].type) + text = lines[i].tokens[j].text + if not isinstance(text, str): + text = text.encode("charmap") + value = lines[i].tokens[j].value + size = lines[i].tokens[j].size + operand = lines[i].tokens[j].operand + context = lines[i].tokens[j].context + confidence = lines[i].tokens[j].confidence + address = lines[i].tokens[j].address + tokens.append(InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + result.append(tokens) + 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): + sc = core.BNSizeWithConfidence() + sc.value = int(value) + if hasattr(value, 'confidence'): + sc.confidence = value.confidence + else: + sc.confidence = types.max_confidence + core.BNSetAutoFunctionStackAdjustment(self.handle, sc)
+ +
[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(self._view, handle = block)
+ +
[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 + tokens = [] + for j in range(0, lines[i].count): + token_type = InstructionTextTokenType(lines[i].tokens[j].type) + text = lines[i].tokens[j].text + value = lines[i].tokens[j].value + size = lines[i].tokens[j].size + operand = lines[i].tokens[j].operand + context = lines[i].tokens[j].context + confidence = lines[i].tokens[j].confidence + address = lines[i].tokens[j].address + tokens.append(InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + result.append(DisassemblyTextLine(addr, tokens)) + 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]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, addr, tokens, il_instr = None): + self.address = addr + self.tokens = tokens + self.il_instruction = il_instr
+ + def __str__(self): + result = "" + for token in self.tokens: + result += token.text + return result + + def __repr__(self): + return "<%#x: %s>" % (self.address, str(self))
+ + +
[docs]class FunctionGraphEdge(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 FunctionGraphBlock(object): +
[docs] def __init__(self, handle, graph): + self.handle = handle + self.graph = graph
+ + def __del__(self): + core.BNFreeFunctionGraphBlock(self.handle) + + def __eq__(self, value): + if not isinstance(value, FunctionGraphBlock): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, FunctionGraphBlock): + 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 function graph (read-only)""" + block = core.BNGetFunctionGraphBasicBlock(self.handle) + func_handle = core.BNGetBasicBlockFunction(block) + if func_handle is None: + core.BNFreeBasicBlock(block) + return None + + view = binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func_handle)) + func = Function(view, func_handle) + + if core.BNIsLowLevelILBasicBlock(block): + block = binaryninja.lowlevelil.LowLevelILBasicBlock(view, block, + lowlevelil.LowLevelILFunction(func.arch, core.BNGetBasicBlockLowLevelILFunction(block), func)) + elif core.BNIsMediumLevelILBasicBlock(block): + block = binaryninja.mediumlevelil.MediumLevelILBasicBlock(view, block, + mediumlevelil.MediumLevelILFunction(func.arch, core.BNGetBasicBlockMediumLevelILFunction(block), func)) + else: + block = binaryninja.basicblock.BasicBlock(view, block) + return block + + @property + def arch(self): + """Function graph block architecture (read-only)""" + arch = core.BNGetFunctionGraphBlockArchitecture(self.handle) + if arch is None: + return None + return binaryninja.architecture.CoreArchitecture._from_cache(arch) + + @property + def start(self): + """Function graph block start (read-only)""" + return core.BNGetFunctionGraphBlockStart(self.handle) + + @property + def end(self): + """Function graph block end (read-only)""" + return core.BNGetFunctionGraphBlockEnd(self.handle) + + @property + def x(self): + """Function graph block X (read-only)""" + return core.BNGetFunctionGraphBlockX(self.handle) + + @property + def y(self): + """Function graph block Y (read-only)""" + return core.BNGetFunctionGraphBlockY(self.handle) + + @property + def width(self): + """Function graph block width (read-only)""" + return core.BNGetFunctionGraphBlockWidth(self.handle) + + @property + def height(self): + """Function graph block height (read-only)""" + return core.BNGetFunctionGraphBlockHeight(self.handle) + + @property + def lines(self): + """Function graph block list of lines (read-only)""" + count = ctypes.c_ulonglong() + lines = core.BNGetFunctionGraphBlockLines(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 hasattr(block, 'il_function'): + il_instr = block.il_function[lines[i].instrIndex] + else: + il_instr = None + tokens = [] + for j in range(0, lines[i].count): + token_type = InstructionTextTokenType(lines[i].tokens[j].type) + text = lines[i].tokens[j].text + value = lines[i].tokens[j].value + size = lines[i].tokens[j].size + operand = lines[i].tokens[j].operand + context = lines[i].tokens[j].context + confidence = lines[i].tokens[j].confidence + address = lines[i].tokens[j].address + tokens.append(InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + result.append(DisassemblyTextLine(addr, tokens, il_instr)) + core.BNFreeDisassemblyTextLines(lines, count.value) + return result + + @property + def outgoing_edges(self): + """Function graph block list of outgoing edges (read-only)""" + count = ctypes.c_ulonglong() + edges = core.BNGetFunctionGraphBlockOutgoingEdges(self.handle, count) + result = [] + for i in range(0, count.value): + branch_type = BranchType(edges[i].type) + target = edges[i].target + if target: + func = core.BNGetBasicBlockFunction(target) + if func is None: + core.BNFreeBasicBlock(target) + target = None + else: + target = binaryninja.basicblock.BasicBlock(binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func)), + core.BNNewBasicBlockReference(target)) + core.BNFreeFunction(func) + points = [] + for j in range(0, edges[i].pointCount): + points.append((edges[i].points[j].x, edges[i].points[j].y)) + result.append(FunctionGraphEdge(branch_type, self, target, points, edges[i].backEdge)) + core.BNFreeFunctionGraphBlockOutgoingEdgeList(edges, 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): + arch = self.arch + if arch: + return "<graph block: %s@%#x-%#x>" % (arch.name, self.start, self.end) + else: + return "<graph block: %#x-%#x>" % (self.start, self.end) + + def __iter__(self): + count = ctypes.c_ulonglong() + lines = core.BNGetFunctionGraphBlockLines(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 hasattr(block, 'il_function'): + il_instr = block.il_function[lines[i].instrIndex] + else: + il_instr = None + tokens = [] + for j in range(0, lines[i].count): + token_type = InstructionTextTokenType(lines[i].tokens[j].type) + text = lines[i].tokens[j].text + value = lines[i].tokens[j].value + size = lines[i].tokens[j].size + operand = lines[i].tokens[j].operand + context = lines[i].tokens[j].context + confidence = lines[i].tokens[j].confidence + address = lines[i].tokens[j].address + tokens.append(InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + yield DisassemblyTextLine(addr, tokens, il_instr) + finally: + core.BNFreeDisassemblyTextLines(lines, count.value)
+ + +
[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)
+ + +_pending_function_graph_completion_events = {} +
[docs]class FunctionGraph(object): +
[docs] def __init__(self, view, handle): + self.view = view + self.handle = handle + self._on_complete = None + self._cb = ctypes.CFUNCTYPE(None, ctypes.c_void_p)(self._complete)
+ + def __del__(self): + self.abort() + core.BNFreeFunctionGraph(self.handle) + + def __eq__(self, value): + if not isinstance(value, FunctionGraph): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, FunctionGraph): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def function(self): + """Function for a function graph (read-only)""" + func = core.BNGetFunctionForFunctionGraph(self.handle) + if func is None: + return None + return Function(self.view, func) + + @property + def complete(self): + """Whether function graph layout is complete (read-only)""" + return core.BNIsFunctionGraphLayoutComplete(self.handle) + + @property + def type(self): + """Function graph type (read-only)""" + return FunctionGraphType(core.BNGetFunctionGraphType(self.handle)) + + @property + def blocks(self): + """List of basic blocks in function (read-only)""" + count = ctypes.c_ulonglong() + blocks = core.BNGetFunctionGraphBlocks(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(FunctionGraphBlock(core.BNNewFunctionGraphBlockReference(blocks[i]), self)) + core.BNFreeFunctionGraphBlockList(blocks, count.value) + return result + + @property + def has_blocks(self): + """Whether the function graph has at least one block (read-only)""" + return core.BNFunctionGraphHasBlocks(self.handle) + + @property + def width(self): + """Function graph width (read-only)""" + return core.BNGetFunctionGraphWidth(self.handle) + + @property + def height(self): + """Function graph height (read-only)""" + return core.BNGetFunctionGraphHeight(self.handle) + + @property + def horizontal_block_margin(self): + return core.BNGetHorizontalFunctionGraphBlockMargin(self.handle) + + @horizontal_block_margin.setter + def horizontal_block_margin(self, value): + core.BNSetFunctionGraphBlockMargins(self.handle, value, self.vertical_block_margin) + + @property + def vertical_block_margin(self): + return core.BNGetVerticalFunctionGraphBlockMargin(self.handle) + + @vertical_block_margin.setter + def vertical_block_margin(self, value): + core.BNSetFunctionGraphBlockMargins(self.handle, self.horizontal_block_margin, value) + + @property + def settings(self): + return DisassemblySettings(core.BNGetFunctionGraphSettings(self.handle)) + + @property + def is_il(self): + return core.BNIsILFunctionGraph(self.handle) + + @property + def is_low_level_il(self): + return core.BNIsLowLevelILFunctionGraph(self.handle) + + @property + def is_medium_level_il(self): + return core.BNIsMediumLevelILFunctionGraph(self.handle) + + @property + def il_function(self): + if self.is_low_level_il: + il_func = core.BNGetFunctionGraphLowLevelILFunction(self.handle) + if not il_func: + return None + return binaryninja.lowlevelil.LowLevelILFunction(self.function.arch, il_func, self.function) + if self.is_medium_level_il: + il_func = core.BNGetFunctionGraphMediumLevelILFunction(self.handle) + if not il_func: + return None + return binaryninja.mediumlevelil.MediumLevelILFunction(self.function.arch, il_func, self.function) + return None + + 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 "<graph of %s>" % repr(self.function) + + def __iter__(self): + count = ctypes.c_ulonglong() + blocks = core.BNGetFunctionGraphBlocks(self.handle, count) + try: + for i in range(0, count.value): + yield FunctionGraphBlock(core.BNNewFunctionGraphBlockReference(blocks[i]), self) + finally: + core.BNFreeFunctionGraphBlockList(blocks, count.value) + + def _complete(self, ctxt): + try: + if self._on_complete is not None: + self._on_complete() + global _pending_function_graph_completion_events + if id(self) in _pending_function_graph_completion_events: + del _pending_function_graph_completion_events[id(self)] + except: + log.log_error(traceback.format_exc()) + +
[docs] def layout(self, graph_type = FunctionGraphType.NormalFunctionGraph): + if isinstance(graph_type, str): + graph_type = FunctionGraphType[graph_type] + core.BNStartFunctionGraphLayout(self.handle, graph_type)
+ + def _wait_complete(self): + self._wait_cond.acquire() + self._wait_cond.notify() + self._wait_cond.release() + +
[docs] def layout_and_wait(self, graph_type=FunctionGraphType.NormalFunctionGraph): + self._wait_cond = threading.Condition() + self.on_complete(self._wait_complete) + self.layout(graph_type) + + self._wait_cond.acquire() + while not self.complete: + self._wait_cond.wait() + self._wait_cond.release()
+ +
[docs] def on_complete(self, callback): + global _pending_function_graph_completion_events + _pending_function_graph_completion_events[id(self)] = self + self._on_complete = callback + core.BNSetFunctionGraphCompleteCallback(self.handle, None, self._cb)
+ +
[docs] def abort(self): + core.BNAbortFunctionGraph(self.handle) + global _pending_function_graph_completion_events + if id(self) in _pending_function_graph_completion_events: + del _pending_function_graph_completion_events[id(self)]
+ +
[docs] def get_blocks_in_region(self, left, top, right, bottom): + count = ctypes.c_ulonglong() + blocks = core.BNGetFunctionGraphBlocksInRegion(self.handle, left, top, right, bottom, count) + result = [] + for i in range(0, count.value): + result.append(FunctionGraphBlock(core.BNNewFunctionGraphBlockReference(blocks[i]), self)) + core.BNFreeFunctionGraphBlockList(blocks, count.value) + return result
+ +
[docs] def is_option_set(self, option): + if isinstance(option, str): + option = DisassemblyOption[option] + return core.BNIsFunctionGraphOptionSet(self.handle, option)
+ +
[docs] def set_option(self, option, state = True): + if isinstance(option, str): + option = DisassemblyOption[option] + core.BNSetFunctionGraphOption(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): + 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
+ + def __str__(self): + return self.text + + def __repr__(self): + return repr(self.text)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_modules/binaryninja/functionrecognizer.html b/api-docs/_modules/binaryninja/functionrecognizer.html new file mode 100644 index 0000000..f43d8a8 --- /dev/null +++ b/api-docs/_modules/binaryninja/functionrecognizer.html @@ -0,0 +1,321 @@ + + + + + + + + + + + binaryninja.functionrecognizer — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.functionrecognizer

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+
+
[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)
+ + @classmethod +
[docs] def register_global(cls): + if cls._instance is None: + cls._instance = cls() + core.BNRegisterGlobalFunctionRecognizer(cls._instance._cb)
+ + @classmethod +
[docs] 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/api-docs/_modules/binaryninja/highlight.html b/api-docs/_modules/binaryninja/highlight.html new file mode 100644 index 0000000..9b225db --- /dev/null +++ b/api-docs/_modules/binaryninja/highlight.html @@ -0,0 +1,354 @@ + + + + + + + + + + + binaryninja.highlight — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.highlight

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_modules/binaryninja/interaction.html b/api-docs/_modules/binaryninja/interaction.html new file mode 100644 index 0000000..9f5cdd4 --- /dev/null +++ b/api-docs/_modules/binaryninja/interaction.html @@ -0,0 +1,1008 @@ + + + + + + + + + + + binaryninja.interaction — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.interaction

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+from binaryninja import binaryview
+
+# 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 currenlty functions differently on the command line, as the view and current_address are + disregarded. Additionally where as in the ui the result defaults to hexidecimal 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.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 _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 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]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 popup is used. On the commandline + a simple text prompt is used. + + :param str title: title to display in the UI popup. + :param str contents: plain text 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. + + Note: This API function differently on the command line vs. the UI. In the UI a popup is used. On the commandline + 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. + + Note: This API function differently on the command line vs. the UI. In the UI a popup is used. On the commandline + 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 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 popup is used. On the commandline + 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 popup is used. On the commandline + 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 popup is used. On the commandline + 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 popup is used. On the commandline + 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 popup is used. On the commandline + a simple text prompt is used. The ui uses the native window popup 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 popup is used. On the commandline + a simple text prompt is used. The ui uses the native window popup 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 popup is used. On the commandline a simple text prompt is used. The ui uses the native window popup 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 popup 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 popup 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/api-docs/_modules/binaryninja/lineardisassembly.html b/api-docs/_modules/binaryninja/lineardisassembly.html new file mode 100644 index 0000000..27f6970 --- /dev/null +++ b/api-docs/_modules/binaryninja/lineardisassembly.html @@ -0,0 +1,289 @@ + + + + + + + + + + + binaryninja.lineardisassembly — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.lineardisassembly

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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/api-docs/_modules/binaryninja/log.html b/api-docs/_modules/binaryninja/log.html new file mode 100644 index 0000000..66be24f --- /dev/null +++ b/api-docs/_modules/binaryninja/log.html @@ -0,0 +1,426 @@ + + + + + + + + + + + binaryninja.log — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.log

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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 debuging 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 overwritting. + + :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/api-docs/_modules/binaryninja/lowlevelil.html b/api-docs/_modules/binaryninja/lowlevelil.html new file mode 100644 index 0000000..7083e22 --- /dev/null +++ b/api-docs/_modules/binaryninja/lowlevelil.html @@ -0,0 +1,2629 @@ + + + + + + + + + + + binaryninja.lowlevelil — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.lowlevelil

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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_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] + 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 = [] + for i in range(0, count.value): + token_type = InstructionTextTokenType(tokens[i].type) + text = tokens[i].text + value = tokens[i].value + size = tokens[i].size + operand = tokens[i].operand + context = tokens[i].context + confidence = tokens[i].confidence + address = tokens[i].address + result.append(binaryninja.function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + core.BNFreeInstructionText(tokens, count.value) + return result + + @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 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 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 greather 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, 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) + else: + func_handle = None + if self.source_function is not None: + func_handle = self.source_function.handle + self.handle = core.BNCreateLowLevelILFunction(arch.handle, func_handle)
+ + def __del__(self): + 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)
+ + @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 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 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) + + 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 regiters 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 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 extn + :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 toexpression ``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]class LowLevelILBasicBlock(basicblock.BasicBlock): +
[docs] def __init__(self, view, handle, owner): + super(LowLevelILBasicBlock, self).__init__(view, handle) + 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, view, handle): + """Internal method by super to instantiante 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/api-docs/_modules/binaryninja/mainthread.html b/api-docs/_modules/binaryninja/mainthread.html new file mode 100644 index 0000000..62c360e --- /dev/null +++ b/api-docs/_modules/binaryninja/mainthread.html @@ -0,0 +1,301 @@ + + + + + + + + + + + binaryninja.mainthread — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.mainthread

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+
+
[docs]def execute_on_main_thread(func): + action = scriptingprovider._ThreadActionContext(func) + obj = core.BNExecuteOnMainThread(0, action.callback) + if obj: + return scriptingprovider.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/api-docs/_modules/binaryninja/mediumlevelil.html b/api-docs/_modules/binaryninja/mediumlevelil.html new file mode 100644 index 0000000..89e2a8f --- /dev/null +++ b/api-docs/_modules/binaryninja/mediumlevelil.html @@ -0,0 +1,1201 @@ + + + + + + + + + + + binaryninja.mediumlevelil — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.mediumlevelil

+# Copyright (c) 2017 Vector 35 LLC
+#
+# 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
+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 ( + (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)
+ + +
[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_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_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] + 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 = [] + for i in range(0, count.value): + token_type = InstructionTextTokenType(tokens[i].type) + text = tokens[i].text + value = tokens[i].value + size = tokens[i].size + operand = tokens[i].operand + context = tokens[i].context + confidence = tokens[i].confidence + address = tokens[i].address + result.append(function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + core.BNFreeInstructionText(tokens, count.value) + return result + + @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 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, 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) + else: + func_handle = None + if self.source_function is not None: + func_handle = self.source_function.handle + self.handle = core.BNCreateMediumLevelILFunction(arch.handle, func_handle)
+ + def __del__(self): + 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 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) + + 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) lables: 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]class MediumLevelILBasicBlock(basicblock.BasicBlock): +
[docs] def __init__(self, view, handle, owner): + super(MediumLevelILBasicBlock, self).__init__(view, handle) + 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, view, handle): + """Internal method by super to instantiante 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/api-docs/_modules/binaryninja/metadata.html b/api-docs/_modules/binaryninja/metadata.html new file mode 100644 index 0000000..0881652 --- /dev/null +++ b/api-docs/_modules/binaryninja/metadata.html @@ -0,0 +1,516 @@ + + + + + + + + + + + binaryninja.metadata — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.metadata

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+# 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, int): + 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): + if raw: + buffer = (ctypes.c_ubyte * len(value)).from_buffer_copy(value.encode('charmap')) + 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): + 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("List doesn't not contain type of: int, bool, str, float, list, dict")
+ + @property + def value(self): + if self.is_integer: + return int(self) + elif self.is_string or self.is_raw: + return str(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 __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/api-docs/_modules/binaryninja/platform.html b/api-docs/_modules/binaryninja/platform.html new file mode 100644 index 0000000..f89012e --- /dev/null +++ b/api-docs/_modules/binaryninja/platform.html @@ -0,0 +1,704 @@ + + + + + + + + + + + binaryninja.platform — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.platform

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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(None, 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(None, 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(None, 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(None, core.BNNewPlatformReference(platforms[i])))
+		core.BNFreePlatformList(platforms, count.value)
+		return result
+
+
+
[docs]class Platform(with_metaclass(_PlatformMetaClass, object)): + """ + ``class Platform`` contains all information releated to the execution environment of the binary, mainly the + calling conventions used. + """ + name = None + +
[docs] def __init__(self, arch, handle = None): + if handle is None: + 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): + 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(None, 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/api-docs/_modules/binaryninja/plugin.html b/api-docs/_modules/binaryninja/plugin.html new file mode 100644 index 0000000..3f152ea --- /dev/null +++ b/api-docs/_modules/binaryninja/plugin.html @@ -0,0 +1,903 @@ + + + + + + + + + + + binaryninja.plugin — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.plugin

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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 + + @classmethod +
[docs] 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)
+ + @classmethod +
[docs] 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)
+ + @classmethod +
[docs] 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)
+ + @classmethod +
[docs] 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)
+ + @classmethod +
[docs] 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.startup._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)
+ + @classmethod +
[docs] 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.startup._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)
+ + @classmethod +
[docs] 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.startup._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)
+ + @classmethod +
[docs] 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.startup._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)
+ + @classmethod +
[docs] 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/api-docs/_modules/binaryninja/pluginmanager.html b/api-docs/_modules/binaryninja/pluginmanager.html new file mode 100644 index 0000000..6410d9f --- /dev/null +++ b/api-docs/_modules/binaryninja/pluginmanager.html @@ -0,0 +1,640 @@ + + + + + + + + + + + binaryninja.pluginmanager — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.pluginmanager

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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/unstalled 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/api-docs/_modules/binaryninja/scriptingprovider.html b/api-docs/_modules/binaryninja/scriptingprovider.html new file mode 100644 index 0000000..8622f75 --- /dev/null +++ b/api-docs/_modules/binaryninja/scriptingprovider.html @@ -0,0 +1,906 @@ + + + + + + + + + + + binaryninja.scriptingprovider — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.scriptingprovider

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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.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 _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(binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func)), 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(binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func)), core.BNNewBasicBlockReference(block)) + 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()) + + @abc.abstractmethod +
[docs] def perform_destroy_instance(self): + raise NotImplementedError
+ + @abc.abstractmethod +
[docs] def perform_execute_script_input(self, text): + return ScriptingProviderExecuteResult.InvalidScriptInput
+ + @abc.abstractmethod +
[docs] def perform_set_current_binary_view(self, view): + raise NotImplementedError
+ + @abc.abstractmethod +
[docs] def perform_set_current_function(self, func): + raise NotImplementedError
+ + @abc.abstractmethod +
[docs] def perform_set_current_basic_block(self, block): + raise NotImplementedError
+ + @abc.abstractmethod +
[docs] def perform_set_current_address(self, addr): + raise NotImplementedError
+ + @abc.abstractmethod +
[docs] 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 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.low_level_il + self.locals["current_mlil"] = self.active_func.medium_level_il + + for line in code.split(b'\n'): + self.interpreter.push(line.decode('charmap')) + + 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
+ + @abc.abstractmethod +
[docs] def perform_destroy_instance(self): + self.interpreter.end()
+ + @abc.abstractmethod +
[docs] 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: + result = code.compile_command(text) + 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
+ + @abc.abstractmethod +
[docs] def perform_set_current_binary_view(self, view): + self.interpreter.current_view = view
+ + @abc.abstractmethod +
[docs] def perform_set_current_function(self, func): + self.interpreter.current_func = func
+ + @abc.abstractmethod +
[docs] def perform_set_current_basic_block(self, block): + self.interpreter.current_block = block
+ + @abc.abstractmethod +
[docs] def perform_set_current_address(self, addr): + self.interpreter.current_addr = addr
+ + @abc.abstractmethod +
[docs] 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/api-docs/_modules/binaryninja/setting.html b/api-docs/_modules/binaryninja/setting.html new file mode 100644 index 0000000..d5d7201 --- /dev/null +++ b/api-docs/_modules/binaryninja/setting.html @@ -0,0 +1,387 @@ + + + + + + + + + + + binaryninja.setting — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.setting

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+
+
[docs]class Setting(object): +
[docs] def __init__(self, plugin_name="core"): + self.plugin_name = plugin_name
+ +
[docs] def get_bool(self, name, default_value=False): + return core.BNSettingGetBool(self.plugin_name, name, default_value)
+ +
[docs] def get_integer(self, name, default_value=0): + return core.BNSettingGetInteger(self.plugin_name, name, default_value)
+ +
[docs] def get_string(self, name, default_value=""): + return core.BNSettingGetString(self.plugin_name, name, default_value)
+ +
[docs] def get_integer_list(self, name, default_value=[]): + length = ctypes.c_ulonglong() + length.value = len(default_value) + default_list = (ctypes.c_longlong * len(default_value))() + for i in range(len(default_value)): + default_list[i] = default_value[i] + result = core.BNSettingGetIntegerList(self.plugin_name, name, default_list, ctypes.byref(length)) + out_list = [] + for i in range(length.value): + out_list.append(result[i]) + core.BNFreeSettingIntegerList(result) + return out_list
+ +
[docs] def get_string_list(self, name, default_value=[]): + length = ctypes.c_ulonglong() + length.value = len(default_value) + default_list = (ctypes.c_char_p * len(default_value))() + for i in range(len(default_value)): + default_list[i] = default_value[i].encode('charmap') + result = core.BNSettingGetStringList(self.plugin_name, name, default_list, 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_double(self, name, default_value=0.0): + return core.BNSettingGetDouble(self.plugin_name, name, default_value)
+ +
[docs] def is_bool(self, name): + return core.BNSettingIsBool(self.plugin_name, name)
+ +
[docs] def is_integer(self, name): + return core.BNSettingIsInteger(self.plugin_name, name)
+ +
[docs] def is_string(self, name): + return core.BNSettingIsString(self.plugin_name, name)
+ +
[docs] def is_string_list(self, name): + return core.BNSettingIsStringList(self.plugin_name, name)
+ +
[docs] def is_integer_list(self, name): + return core.BNSettingIsIntegerList(self.plugin_name, name)
+ +
[docs] def is_double(self, name): + return core.BNSettingIsDouble(self.plugin_name, name)
+ +
[docs] def is_present(self, name): + return core.BNSettingIsPresent(self.plugin_name, name)
+ +
[docs] def set_bool(self, name, value, auto_flush=True): + return core.BNSettingSetBool(self.plugin_name, name, value, auto_flush)
+ +
[docs] def set_integer(self, name, value, auto_flush=True): + return core.BNSettingSetInteger(self.plugin_name, name, value, auto_flush)
+ +
[docs] def set_string(self, name, value, auto_flush=True): + return core.BNSettingSetString(self.plugin_name, name, value, auto_flush)
+ +
[docs] def set_integer_list(self, name, value, auto_flush=True): + length = ctypes.c_ulonglong() + length.value = len(value) + default_list = (ctypes.c_longlong * len(value))() + for i in range(len(value)): + default_list[i] = value[i] + + return core.BNSettingSetIntegerList(self.plugin_name, name, default_list, length, auto_flush)
+ +
[docs] def set_string_list(self, name, value, auto_flush=True): + length = ctypes.c_ulonglong() + length.value = len(value) + default_list = (ctypes.c_char_p * len(value))() + for i in range(len(value)): + default_list[i] = value[i].encode('charmap') + + return core.BNSettingSetStringList(self.plugin_name, name, default_list, length, auto_flush)
+ +
[docs] def set_double(self, name, value, auto_flush=True): + return core.BNSettingSetDouble(self.plugin_name, name, value, auto_flush)
+ +
[docs] def set(self, name, value, auto_flush=True): + if isinstance(value, bool): + return self.set_bool(name, value, auto_flush) + elif isinstance(value, int): + return self.set_integer(name, value, auto_flush) + elif isinstance(value, str): + return self.set_string(name, value, auto_flush) + elif isinstance(value, list) and len(value) == 0: + return self.set_integer_list(name, value, auto_flush) + elif isinstance(value, list) and len(value) > 0 and isinstance(value[0], int): + return self.set_integer_list(name, value, auto_flush) + elif isinstance(value, list) and len(value) > 0 and isinstance(value[0], str): + return self.set_string_list(name, value, auto_flush) + elif isinstance(value, float): + return self.set_double(name, value, auto_flush) + raise ValueError("value is not one of (int, bool, float, str, [int], [str]) types")
+ +
[docs] def remove_setting_group(self, auto_flush=True): + core.BNSettingRemoveSettingGroup(self.plugin_name, auto_flush)
+ +
[docs] def remove_setting(self, setting, auto_flush=True): + core.BNSettingRemoveSetting(self.plugin_name, setting, auto_flush)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_modules/binaryninja/transform.html b/api-docs/_modules/binaryninja/transform.html new file mode 100644 index 0000000..f4d6dda --- /dev/null +++ b/api-docs/_modules/binaryninja/transform.html @@ -0,0 +1,487 @@ + + + + + + + + + + + binaryninja.transform — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.transform

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+ + +
[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 + + @abc.abstractmethod +
[docs] def perform_decode(self, data, params): + if self.type == TransformType.InvertingTransform: + return self.perform_encode(data, params) + return None
+ + @abc.abstractmethod +
[docs] 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/api-docs/_modules/binaryninja/types.html b/api-docs/_modules/binaryninja/types.html new file mode 100644 index 0000000..51d17b1 --- /dev/null +++ b/api-docs/_modules/binaryninja/types.html @@ -0,0 +1,1281 @@ + + + + + + + + + + + binaryninja.types — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.types

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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, 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 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 + =========================== ============================================================== + """ +
[docs] def __init__(self, sym_type, addr, short_name, full_name = None, raw_name = None, handle = 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 + self.handle = core.BNCreateSymbol(sym_type, short_name, full_name, raw_name, addr)
+ + 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 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) + + @auto.setter + def auto(self, value): + core.BNSetSymbolAutoDefined(self.handle, value) + + 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 ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, Type): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @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-only)""" + result = core.BNIsTypeConst(self.handle) + return BoolWithConfidence(result.value, confidence = result.confidence) + + @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 __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 = [] + for i in range(0, count.value): + token_type = InstructionTextTokenType(tokens[i].type) + text = tokens[i].text + value = tokens[i].value + size = tokens[i].size + operand = tokens[i].operand + context = tokens[i].context + confidence = tokens[i].confidence + address = tokens[i].address + result.append(binaryninja.function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + core.BNFreeTokenList(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 = [] + for i in range(0, count.value): + token_type = InstructionTextTokenType(tokens[i].type) + text = tokens[i].text + value = tokens[i].value + size = tokens[i].size + operand = tokens[i].operand + context = tokens[i].context + confidence = tokens[i].confidence + address = tokens[i].address + result.append(binaryninja.function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + core.BNFreeTokenList(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 = [] + for i in range(0, count.value): + token_type = InstructionTextTokenType(tokens[i].type) + text = tokens[i].text + value = tokens[i].value + size = tokens[i].size + operand = tokens[i].operand + context = tokens[i].context + confidence = tokens[i].confidence + address = tokens[i].address + result.append(binaryninja.function.InstructionTextToken(token_type, text, value, size, operand, context, address, confidence)) + core.BNFreeTokenList(tokens, count.value) + return result
+ + @classmethod +
[docs] def void(cls): + return Type(core.BNCreateVoidType())
+ + @classmethod +
[docs] def bool(self): + return Type(core.BNCreateBoolType())
+ + @classmethod +
[docs] 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))
+ + @classmethod +
[docs] 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))
+ + @classmethod +
[docs] def structure_type(self, structure_type): + return Type(core.BNCreateStructureType(structure_type.handle))
+ + @classmethod +
[docs] def named_type(self, named_type, width = 0, align = 1): + return Type(core.BNCreateNamedTypeReference(named_type.handle, width, align))
+ + @classmethod +
[docs] 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))
+ + @classmethod +
[docs] 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))
+ + @classmethod +
[docs] def named_type_from_registered_type(self, view, name): + name = QualifiedName(name)._get_core_struct() + return Type(core.BNCreateNamedTypeReferenceFromType(view.handle, name))
+ + @classmethod +
[docs] 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))
+ + @classmethod +
[docs] 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))
+ + @classmethod +
[docs] 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))
+ + @classmethod +
[docs] 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.BNSizeWithConfidence() + 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))
+ + @classmethod +
[docs] def generate_auto_type_id(self, source, name): + name = QualifiedName(name)._get_core_struct() + return core.BNGenerateAutoTypeId(source, name)
+ + @classmethod +
[docs] def generate_auto_demangled_type_id(self, name): + name = QualifiedName(name)._get_core_struct() + return core.BNGenerateAutoDemangledTypeId(name)
+ + @classmethod +
[docs] 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) + + @classmethod +
[docs] 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)
+ + @classmethod +
[docs] 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 preprocess + :param str filename: optional filename to preprocess + :param list(str) include_dirs: list of string directorires 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/api-docs/_modules/binaryninja/undoaction.html b/api-docs/_modules/binaryninja/undoaction.html new file mode 100644 index 0000000..7df7210 --- /dev/null +++ b/api-docs/_modules/binaryninja/undoaction.html @@ -0,0 +1,339 @@ + + + + + + + + + + + binaryninja.undoaction — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.undoaction

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+
+
+
[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
+ + @classmethod +
[docs] 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/api-docs/_modules/binaryninja/update.html b/api-docs/_modules/binaryninja/update.html new file mode 100644 index 0000000..08cd650 --- /dev/null +++ b/api-docs/_modules/binaryninja/update.html @@ -0,0 +1,508 @@ + + + + + + + + + + + binaryninja.update — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.update

+# Copyright (c) 2015-2017 Vector 35 LLC
+#
+# 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
+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, Flase 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/api-docs/_modules/index.html b/api-docs/_modules/index.html new file mode 100644 index 0000000..bf71834 --- /dev/null +++ b/api-docs/_modules/index.html @@ -0,0 +1,267 @@ + + + + + + + + + + + Overview: module code — Binary Ninja API 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/Architecture_c++.txt b/api-docs/_sources/Architecture_c++.txt new file mode 100644 index 0000000..07f4f32 --- /dev/null +++ b/api-docs/_sources/Architecture_c++.txt @@ -0,0 +1,5 @@ +Architecture +============ +.. doxygenclass:: BinaryNinja::Architecture + :members: + :protected-members: diff --git a/api-docs/_sources/BinaryView_c++.txt b/api-docs/_sources/BinaryView_c++.txt new file mode 100644 index 0000000..8320fe2 --- /dev/null +++ b/api-docs/_sources/BinaryView_c++.txt @@ -0,0 +1,4 @@ +BinaryView +=========== +.. doxygenclass:: BinaryNinja::BinaryView + :members: diff --git a/api-docs/_sources/ConsoleLogging_c++.txt b/api-docs/_sources/ConsoleLogging_c++.txt new file mode 100644 index 0000000..f5b0bcc --- /dev/null +++ b/api-docs/_sources/ConsoleLogging_c++.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/api-docs/_sources/Platform_c++.txt b/api-docs/_sources/Platform_c++.txt new file mode 100644 index 0000000..02108bd --- /dev/null +++ b/api-docs/_sources/Platform_c++.txt @@ -0,0 +1,3 @@ +Platform +========= +.. doxygenclass:: BinaryNinja::Platform diff --git a/api-docs/_sources/binaryninja.architecture-module.txt b/api-docs/_sources/binaryninja.architecture-module.txt new file mode 100644 index 0000000..e76cd9b --- /dev/null +++ b/api-docs/_sources/binaryninja.architecture-module.txt @@ -0,0 +1,21 @@ +architecture module +===================== + +.. autosummary:: + :toctree: + + binaryninja.architecture.Architecture + binaryninja.architecture.ArchitectureHook + binaryninja.architecture.CoreArchitecture + binaryninja.architecture.ReferenceSource + 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/api-docs/_sources/binaryninja.architecture.Architecture.txt b/api-docs/_sources/binaryninja.architecture.Architecture.txt new file mode 100644 index 0000000..3573856 --- /dev/null +++ b/api-docs/_sources/binaryninja.architecture.Architecture.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/api-docs/_sources/binaryninja.architecture.ArchitectureHook.txt b/api-docs/_sources/binaryninja.architecture.ArchitectureHook.txt new file mode 100644 index 0000000..817138a --- /dev/null +++ b/api-docs/_sources/binaryninja.architecture.ArchitectureHook.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/api-docs/_sources/binaryninja.architecture.CoreArchitecture.txt b/api-docs/_sources/binaryninja.architecture.CoreArchitecture.txt new file mode 100644 index 0000000..06f9a69 --- /dev/null +++ b/api-docs/_sources/binaryninja.architecture.CoreArchitecture.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/api-docs/_sources/binaryninja.architecture.ReferenceSource.txt b/api-docs/_sources/binaryninja.architecture.ReferenceSource.txt new file mode 100644 index 0000000..3765ac5 --- /dev/null +++ b/api-docs/_sources/binaryninja.architecture.ReferenceSource.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/api-docs/_sources/binaryninja.architecture.range.txt b/api-docs/_sources/binaryninja.architecture.range.txt new file mode 100644 index 0000000..055e5d1 --- /dev/null +++ b/api-docs/_sources/binaryninja.architecture.range.txt @@ -0,0 +1,6 @@ +binaryninja.architecture.range +============================== + +.. currentmodule:: binaryninja.architecture + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.architecture.with_metaclass.txt b/api-docs/_sources/binaryninja.architecture.with_metaclass.txt new file mode 100644 index 0000000..1d4f45f --- /dev/null +++ b/api-docs/_sources/binaryninja.architecture.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.architecture.with_metaclass +======================================= + +.. currentmodule:: binaryninja.architecture + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.atexit-module.txt b/api-docs/_sources/binaryninja.atexit-module.txt new file mode 100644 index 0000000..2cadb14 --- /dev/null +++ b/api-docs/_sources/binaryninja.atexit-module.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/api-docs/_sources/binaryninja.atexit.register.txt b/api-docs/_sources/binaryninja.atexit.register.txt new file mode 100644 index 0000000..26d6126 --- /dev/null +++ b/api-docs/_sources/binaryninja.atexit.register.txt @@ -0,0 +1,6 @@ +binaryninja.atexit.register +=========================== + +.. currentmodule:: binaryninja.atexit + +.. autofunction:: register \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.basicblock-module.txt b/api-docs/_sources/binaryninja.basicblock-module.txt new file mode 100644 index 0000000..dbfe34b --- /dev/null +++ b/api-docs/_sources/binaryninja.basicblock-module.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/api-docs/_sources/binaryninja.basicblock.BasicBlock.txt b/api-docs/_sources/binaryninja.basicblock.BasicBlock.txt new file mode 100644 index 0000000..2d0349a --- /dev/null +++ b/api-docs/_sources/binaryninja.basicblock.BasicBlock.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/api-docs/_sources/binaryninja.basicblock.BasicBlockEdge.txt b/api-docs/_sources/binaryninja.basicblock.BasicBlockEdge.txt new file mode 100644 index 0000000..38bbecf --- /dev/null +++ b/api-docs/_sources/binaryninja.basicblock.BasicBlockEdge.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/api-docs/_sources/binaryninja.basicblock.range.txt b/api-docs/_sources/binaryninja.basicblock.range.txt new file mode 100644 index 0000000..056e4ae --- /dev/null +++ b/api-docs/_sources/binaryninja.basicblock.range.txt @@ -0,0 +1,6 @@ +binaryninja.basicblock.range +============================ + +.. currentmodule:: binaryninja.basicblock + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja-module.txt b/api-docs/_sources/binaryninja.binaryninja-module.txt new file mode 100644 index 0000000..81f3453 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja-module.txt @@ -0,0 +1,200 @@ +binaryninja module +===================== + +.. autosummary:: + :toctree: + + binaryninja.binaryninja.ActiveAnalysisInfo + binaryninja.binaryninja.AddressField + binaryninja.binaryninja.AddressRange + binaryninja.binaryninja.AdvancedFunctionAnalysisDataRequestor + binaryninja.binaryninja.AnalysisCompletionEvent + binaryninja.binaryninja.AnalysisInfo + binaryninja.binaryninja.AnalysisProgress + binaryninja.binaryninja.Architecture + binaryninja.binaryninja.ArchitectureHook + binaryninja.binaryninja.BackgroundTask + binaryninja.binaryninja.BackgroundTaskThread + binaryninja.binaryninja.BasicBlock + binaryninja.binaryninja.BasicBlockEdge + binaryninja.binaryninja.BinaryDataNotification + binaryninja.binaryninja.BinaryDataNotificationCallbacks + binaryninja.binaryninja.BinaryReader + binaryninja.binaryninja.BinaryView + binaryninja.binaryninja.BinaryViewType + binaryninja.binaryninja.BinaryWriter + binaryninja.binaryninja.BoolWithConfidence + binaryninja.binaryninja.CallingConvention + binaryninja.binaryninja.ChoiceField + binaryninja.binaryninja.ConstantReference + binaryninja.binaryninja.CoreArchitecture + binaryninja.binaryninja.CoreFileAccessor + binaryninja.binaryninja.DataBuffer + binaryninja.binaryninja.DataVariable + binaryninja.binaryninja.DirectoryNameField + binaryninja.binaryninja.DisassemblySettings + binaryninja.binaryninja.DisassemblyTextLine + binaryninja.binaryninja.DownloadInstance + binaryninja.binaryninja.DownloadProvider + binaryninja.binaryninja.Enumeration + binaryninja.binaryninja.EnumerationMember + binaryninja.binaryninja.FileAccessor + binaryninja.binaryninja.FileMetadata + binaryninja.binaryninja.Function + binaryninja.binaryninja.FunctionGraph + binaryninja.binaryninja.FunctionGraphBlock + binaryninja.binaryninja.FunctionGraphEdge + binaryninja.binaryninja.FunctionParameter + binaryninja.binaryninja.FunctionRecognizer + binaryninja.binaryninja.HighlightColor + binaryninja.binaryninja.ILFlag + binaryninja.binaryninja.ILIntrinsic + binaryninja.binaryninja.ILRegister + binaryninja.binaryninja.ILRegisterStack + binaryninja.binaryninja.ILSemanticFlagClass + binaryninja.binaryninja.ILSemanticFlagGroup + binaryninja.binaryninja.IndirectBranchInfo + binaryninja.binaryninja.InstructionBranch + binaryninja.binaryninja.InstructionInfo + binaryninja.binaryninja.InstructionTextToken + binaryninja.binaryninja.IntegerField + binaryninja.binaryninja.InteractionHandler + binaryninja.binaryninja.IntrinsicInfo + binaryninja.binaryninja.IntrinsicInput + binaryninja.binaryninja.LabelField + binaryninja.binaryninja.LinearDisassemblyLine + binaryninja.binaryninja.LinearDisassemblyPosition + binaryninja.binaryninja.LookupTableEntry + binaryninja.binaryninja.LowLevelILBasicBlock + binaryninja.binaryninja.LowLevelILExpr + binaryninja.binaryninja.LowLevelILFunction + binaryninja.binaryninja.LowLevelILInstruction + binaryninja.binaryninja.LowLevelILLabel + binaryninja.binaryninja.LowLevelILOperationAndSize + binaryninja.binaryninja.MainThreadAction + binaryninja.binaryninja.MainThreadActionHandler + binaryninja.binaryninja.MediumLevelILBasicBlock + binaryninja.binaryninja.MediumLevelILExpr + binaryninja.binaryninja.MediumLevelILFunction + binaryninja.binaryninja.MediumLevelILInstruction + binaryninja.binaryninja.MediumLevelILLabel + binaryninja.binaryninja.MediumLevelILOperationAndSize + binaryninja.binaryninja.Metadata + binaryninja.binaryninja.MultilineTextField + binaryninja.binaryninja.NamedTypeReference + binaryninja.binaryninja.NavigationHandler + binaryninja.binaryninja.OpenFileNameField + binaryninja.binaryninja.ParameterVariables + binaryninja.binaryninja.Platform + binaryninja.binaryninja.PluginCommand + binaryninja.binaryninja.PluginCommandContext + binaryninja.binaryninja.PluginManagerLoadPluginCallback + binaryninja.binaryninja.PossibleValueSet + binaryninja.binaryninja.PythonDownloadInstance + binaryninja.binaryninja.PythonDownloadProvider + binaryninja.binaryninja.PythonScriptingInstance + binaryninja.binaryninja.PythonScriptingProvider + binaryninja.binaryninja.QualifiedName + binaryninja.binaryninja.ReferenceSource + binaryninja.binaryninja.ReferenceTypeWithConfidence + binaryninja.binaryninja.RegisterInfo + binaryninja.binaryninja.RegisterSet + binaryninja.binaryninja.RegisterStackAdjustmentWithConfidence + binaryninja.binaryninja.RegisterStackInfo + binaryninja.binaryninja.RegisterValue + binaryninja.binaryninja.RepoPlugin + binaryninja.binaryninja.Repository + binaryninja.binaryninja.RepositoryManager + binaryninja.binaryninja.SSAFlag + binaryninja.binaryninja.SSARegister + binaryninja.binaryninja.SSARegisterOrFlag + binaryninja.binaryninja.SSARegisterStack + binaryninja.binaryninja.SSAVariable + binaryninja.binaryninja.SaveFileNameField + binaryninja.binaryninja.ScriptingInstance + binaryninja.binaryninja.ScriptingOutputListener + binaryninja.binaryninja.ScriptingProvider + binaryninja.binaryninja.Section + binaryninja.binaryninja.Segment + binaryninja.binaryninja.SeparatorField + binaryninja.binaryninja.Setting + binaryninja.binaryninja.SizeWithConfidence + binaryninja.binaryninja.StackVariableReference + binaryninja.binaryninja.StringReference + binaryninja.binaryninja.Structure + binaryninja.binaryninja.StructureMember + binaryninja.binaryninja.Symbol + binaryninja.binaryninja.TextLineField + binaryninja.binaryninja.Transform + binaryninja.binaryninja.TransformParameter + binaryninja.binaryninja.Type + binaryninja.binaryninja.TypeParserResult + binaryninja.binaryninja.UndoAction + binaryninja.binaryninja.UpdateChannel + binaryninja.binaryninja.UpdateProgressCallback + binaryninja.binaryninja.UpdateVersion + binaryninja.binaryninja.ValueRange + binaryninja.binaryninja.Variable + binaryninja.binaryninja.LLIL_GET_TEMP_REG_INDEX + binaryninja.binaryninja.LLIL_REG_IS_TEMP + binaryninja.binaryninja.LLIL_TEMP + binaryninja.binaryninja.are_auto_updates_enabled + binaryninja.binaryninja.close_logs + binaryninja.binaryninja.cstr + binaryninja.binaryninja.demangle_gnu3 + binaryninja.binaryninja.demangle_ms + binaryninja.binaryninja.escape_string + binaryninja.binaryninja.execute_on_main_thread + binaryninja.binaryninja.execute_on_main_thread_and_wait + binaryninja.binaryninja.get_address_input + binaryninja.binaryninja.get_choice_input + binaryninja.binaryninja.get_directory_name_input + binaryninja.binaryninja.get_form_input + binaryninja.binaryninja.get_install_directory + binaryninja.binaryninja.get_int_input + binaryninja.binaryninja.get_open_filename_input + binaryninja.binaryninja.get_qualified_name + binaryninja.binaryninja.get_save_filename_input + binaryninja.binaryninja.get_text_line_input + binaryninja.binaryninja.get_time_since_last_update_check + binaryninja.binaryninja.get_unique_identifier + binaryninja.binaryninja.get_worker_thread_count + binaryninja.binaryninja.install_pending_update + binaryninja.binaryninja.is_output_redirected_to_log + binaryninja.binaryninja.is_update_installation_pending + binaryninja.binaryninja.log_alert + binaryninja.binaryninja.log_debug + binaryninja.binaryninja.log_error + binaryninja.binaryninja.log_info + binaryninja.binaryninja.log_to_file + binaryninja.binaryninja.log_to_stderr + binaryninja.binaryninja.log_to_stdout + binaryninja.binaryninja.log_warn + binaryninja.binaryninja.markdown_to_html + binaryninja.binaryninja.preprocess_source + binaryninja.binaryninja.pyNativeStr + binaryninja.binaryninja.range + binaryninja.binaryninja.redirect_output_to_log + binaryninja.binaryninja.redirect_stdio + binaryninja.binaryninja.set_auto_updates_enabled + binaryninja.binaryninja.set_worker_thread_count + binaryninja.binaryninja.show_html_report + binaryninja.binaryninja.show_markdown_report + binaryninja.binaryninja.show_message_box + binaryninja.binaryninja.show_plain_text_report + binaryninja.binaryninja.shutdown + binaryninja.binaryninja.unescape_string + binaryninja.binaryninja.updates_checked + binaryninja.binaryninja.with_metaclass + binaryninja.binaryninja.worker_enqueue + binaryninja.binaryninja.worker_interactive_enqueue + binaryninja.binaryninja.worker_priority_enqueue + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.binaryninja + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ActiveAnalysisInfo.txt b/api-docs/_sources/binaryninja.binaryninja.ActiveAnalysisInfo.txt new file mode 100644 index 0000000..7d116a0 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ActiveAnalysisInfo.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ActiveAnalysisInfo +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ActiveAnalysisInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ActiveAnalysisInfo.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.AddressField.txt b/api-docs/_sources/binaryninja.binaryninja.AddressField.txt new file mode 100644 index 0000000..1391417 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.AddressField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.AddressField +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: AddressField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AddressField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.AddressRange.txt b/api-docs/_sources/binaryninja.binaryninja.AddressRange.txt new file mode 100644 index 0000000..229fb8b --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.AddressRange.txt @@ -0,0 +1,28 @@ +binaryninja.binaryninja.AddressRange +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: AddressRange + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AddressRange.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~AddressRange.length + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.AdvancedFunctionAnalysisDataRequestor.txt b/api-docs/_sources/binaryninja.binaryninja.AdvancedFunctionAnalysisDataRequestor.txt new file mode 100644 index 0000000..9dc5067 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.AdvancedFunctionAnalysisDataRequestor.txt @@ -0,0 +1,29 @@ +binaryninja.binaryninja.AdvancedFunctionAnalysisDataRequestor +============================================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.AnalysisCompletionEvent.txt b/api-docs/_sources/binaryninja.binaryninja.AnalysisCompletionEvent.txt new file mode 100644 index 0000000..759df25 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.AnalysisCompletionEvent.txt @@ -0,0 +1,23 @@ +binaryninja.binaryninja.AnalysisCompletionEvent +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: AnalysisCompletionEvent + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AnalysisCompletionEvent.__init__ + ~AnalysisCompletionEvent.cancel + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.AnalysisInfo.txt b/api-docs/_sources/binaryninja.binaryninja.AnalysisInfo.txt new file mode 100644 index 0000000..07c57cd --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.AnalysisInfo.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.AnalysisInfo +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: AnalysisInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AnalysisInfo.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.AnalysisProgress.txt b/api-docs/_sources/binaryninja.binaryninja.AnalysisProgress.txt new file mode 100644 index 0000000..3bcbd42 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.AnalysisProgress.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.AnalysisProgress +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: AnalysisProgress + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AnalysisProgress.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Architecture.txt b/api-docs/_sources/binaryninja.binaryninja.Architecture.txt new file mode 100644 index 0000000..ef2d1b0 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Architecture.txt @@ -0,0 +1,120 @@ +binaryninja.binaryninja.Architecture +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.ArchitectureHook.txt b/api-docs/_sources/binaryninja.binaryninja.ArchitectureHook.txt new file mode 100644 index 0000000..dad8910 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ArchitectureHook.txt @@ -0,0 +1,121 @@ +binaryninja.binaryninja.ArchitectureHook +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BackgroundTask.txt b/api-docs/_sources/binaryninja.binaryninja.BackgroundTask.txt new file mode 100644 index 0000000..cd51081 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BackgroundTask.txt @@ -0,0 +1,34 @@ +binaryninja.binaryninja.BackgroundTask +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BackgroundTaskThread.txt b/api-docs/_sources/binaryninja.binaryninja.BackgroundTaskThread.txt new file mode 100644 index 0000000..b24925e --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BackgroundTaskThread.txt @@ -0,0 +1,37 @@ +binaryninja.binaryninja.BackgroundTaskThread +============================================ + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BasicBlock.txt b/api-docs/_sources/binaryninja.binaryninja.BasicBlock.txt new file mode 100644 index 0000000..b2b2051 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BasicBlock.txt @@ -0,0 +1,53 @@ +binaryninja.binaryninja.BasicBlock +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BasicBlockEdge.txt b/api-docs/_sources/binaryninja.binaryninja.BasicBlockEdge.txt new file mode 100644 index 0000000..7ac73d7 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BasicBlockEdge.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.BasicBlockEdge +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: BasicBlockEdge + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BasicBlockEdge.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.BinaryDataNotification.txt b/api-docs/_sources/binaryninja.binaryninja.BinaryDataNotification.txt new file mode 100644 index 0000000..08e84e6 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BinaryDataNotification.txt @@ -0,0 +1,36 @@ +binaryninja.binaryninja.BinaryDataNotification +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BinaryDataNotificationCallbacks.txt b/api-docs/_sources/binaryninja.binaryninja.BinaryDataNotificationCallbacks.txt new file mode 100644 index 0000000..233aeb1 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BinaryDataNotificationCallbacks.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.BinaryDataNotificationCallbacks +======================================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: BinaryDataNotificationCallbacks + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BinaryDataNotificationCallbacks.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.BinaryReader.txt b/api-docs/_sources/binaryninja.binaryninja.BinaryReader.txt new file mode 100644 index 0000000..2457810 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BinaryReader.txt @@ -0,0 +1,43 @@ +binaryninja.binaryninja.BinaryReader +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BinaryView.txt b/api-docs/_sources/binaryninja.binaryninja.BinaryView.txt new file mode 100644 index 0000000..bba8839 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BinaryView.txt @@ -0,0 +1,216 @@ +binaryninja.binaryninja.BinaryView +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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.find_next_data + ~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_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.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_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_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.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_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.next_address + ~BinaryView.offset + ~BinaryView.parameters_for_analysis + ~BinaryView.parent_view + ~BinaryView.platform + ~BinaryView.registered_view_type + ~BinaryView.relocatable + ~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/api-docs/_sources/binaryninja.binaryninja.BinaryViewType.txt b/api-docs/_sources/binaryninja.binaryninja.BinaryViewType.txt new file mode 100644 index 0000000..e24b500 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BinaryViewType.txt @@ -0,0 +1,39 @@ +binaryninja.binaryninja.BinaryViewType +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BinaryWriter.txt b/api-docs/_sources/binaryninja.binaryninja.BinaryWriter.txt new file mode 100644 index 0000000..4844db1 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BinaryWriter.txt @@ -0,0 +1,42 @@ +binaryninja.binaryninja.BinaryWriter +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.BoolWithConfidence.txt b/api-docs/_sources/binaryninja.binaryninja.BoolWithConfidence.txt new file mode 100644 index 0000000..f4d81d4 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.BoolWithConfidence.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.BoolWithConfidence +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: BoolWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BoolWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.CallingConvention.txt b/api-docs/_sources/binaryninja.binaryninja.CallingConvention.txt new file mode 100644 index 0000000..eac932c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.CallingConvention.txt @@ -0,0 +1,48 @@ +binaryninja.binaryninja.CallingConvention +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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.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/api-docs/_sources/binaryninja.binaryninja.ChoiceField.txt b/api-docs/_sources/binaryninja.binaryninja.ChoiceField.txt new file mode 100644 index 0000000..b83460b --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ChoiceField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ChoiceField +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ChoiceField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ChoiceField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ConstantReference.txt b/api-docs/_sources/binaryninja.binaryninja.ConstantReference.txt new file mode 100644 index 0000000..66aea59 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ConstantReference.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ConstantReference +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ConstantReference + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ConstantReference.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.CoreArchitecture.txt b/api-docs/_sources/binaryninja.binaryninja.CoreArchitecture.txt new file mode 100644 index 0000000..fe41089 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.CoreArchitecture.txt @@ -0,0 +1,120 @@ +binaryninja.binaryninja.CoreArchitecture +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.CoreFileAccessor.txt b/api-docs/_sources/binaryninja.binaryninja.CoreFileAccessor.txt new file mode 100644 index 0000000..78ca27a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.CoreFileAccessor.txt @@ -0,0 +1,25 @@ +binaryninja.binaryninja.CoreFileAccessor +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.DataBuffer.txt b/api-docs/_sources/binaryninja.binaryninja.DataBuffer.txt new file mode 100644 index 0000000..efdf165 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.DataBuffer.txt @@ -0,0 +1,28 @@ +binaryninja.binaryninja.DataBuffer +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.DataVariable.txt b/api-docs/_sources/binaryninja.binaryninja.DataVariable.txt new file mode 100644 index 0000000..38466a2 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.DataVariable.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.DataVariable +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: DataVariable + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DataVariable.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.DirectoryNameField.txt b/api-docs/_sources/binaryninja.binaryninja.DirectoryNameField.txt new file mode 100644 index 0000000..f686dc7 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.DirectoryNameField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.DirectoryNameField +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: DirectoryNameField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DirectoryNameField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.DisassemblySettings.txt b/api-docs/_sources/binaryninja.binaryninja.DisassemblySettings.txt new file mode 100644 index 0000000..4ee60e3 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.DisassemblySettings.txt @@ -0,0 +1,31 @@ +binaryninja.binaryninja.DisassemblySettings +=========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.DisassemblyTextLine.txt b/api-docs/_sources/binaryninja.binaryninja.DisassemblyTextLine.txt new file mode 100644 index 0000000..18cf192 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.DisassemblyTextLine.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.DisassemblyTextLine +=========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: DisassemblyTextLine + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DisassemblyTextLine.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.DownloadInstance.txt b/api-docs/_sources/binaryninja.binaryninja.DownloadInstance.txt new file mode 100644 index 0000000..2f7bee7 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.DownloadInstance.txt @@ -0,0 +1,24 @@ +binaryninja.binaryninja.DownloadInstance +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.DownloadProvider.txt b/api-docs/_sources/binaryninja.binaryninja.DownloadProvider.txt new file mode 100644 index 0000000..07c42e8 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.DownloadProvider.txt @@ -0,0 +1,31 @@ +binaryninja.binaryninja.DownloadProvider +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.Enumeration.txt b/api-docs/_sources/binaryninja.binaryninja.Enumeration.txt new file mode 100644 index 0000000..cadb182 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Enumeration.txt @@ -0,0 +1,31 @@ +binaryninja.binaryninja.Enumeration +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.EnumerationMember.txt b/api-docs/_sources/binaryninja.binaryninja.EnumerationMember.txt new file mode 100644 index 0000000..73eb970 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.EnumerationMember.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.EnumerationMember +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: EnumerationMember + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~EnumerationMember.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.FileAccessor.txt b/api-docs/_sources/binaryninja.binaryninja.FileAccessor.txt new file mode 100644 index 0000000..1e3bf18 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.FileAccessor.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.FileAccessor +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: FileAccessor + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FileAccessor.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.FileMetadata.txt b/api-docs/_sources/binaryninja.binaryninja.FileMetadata.txt new file mode 100644 index 0000000..b552c3d --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.FileMetadata.txt @@ -0,0 +1,48 @@ +binaryninja.binaryninja.FileMetadata +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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.raw + ~FileMetadata.saved + ~FileMetadata.session_data + ~FileMetadata.view + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Function.txt b/api-docs/_sources/binaryninja.binaryninja.Function.txt new file mode 100644 index 0000000..3e588bd --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Function.txt @@ -0,0 +1,137 @@ +binaryninja.binaryninja.Function +================================ + +.. currentmodule:: binaryninja.binaryninja + +.. 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.mark_recent_use + ~Function.reanalyze + ~Function.release_advanced_analysis_data + ~Function.request_advanced_analysis_data + ~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_basic_blocks + ~Function.llil_instructions + ~Function.low_level_il + ~Function.medium_level_il + ~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.vars + ~Function.view + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.FunctionGraph.txt b/api-docs/_sources/binaryninja.binaryninja.FunctionGraph.txt new file mode 100644 index 0000000..e0cf400 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.FunctionGraph.txt @@ -0,0 +1,48 @@ +binaryninja.binaryninja.FunctionGraph +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: FunctionGraph + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionGraph.__init__ + ~FunctionGraph.abort + ~FunctionGraph.get_blocks_in_region + ~FunctionGraph.is_option_set + ~FunctionGraph.layout + ~FunctionGraph.layout_and_wait + ~FunctionGraph.on_complete + ~FunctionGraph.set_option + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FunctionGraph.blocks + ~FunctionGraph.complete + ~FunctionGraph.function + ~FunctionGraph.has_blocks + ~FunctionGraph.height + ~FunctionGraph.horizontal_block_margin + ~FunctionGraph.il_function + ~FunctionGraph.is_il + ~FunctionGraph.is_low_level_il + ~FunctionGraph.is_medium_level_il + ~FunctionGraph.settings + ~FunctionGraph.type + ~FunctionGraph.vertical_block_margin + ~FunctionGraph.width + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.FunctionGraphBlock.txt b/api-docs/_sources/binaryninja.binaryninja.FunctionGraphBlock.txt new file mode 100644 index 0000000..229e75e --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.FunctionGraphBlock.txt @@ -0,0 +1,37 @@ +binaryninja.binaryninja.FunctionGraphBlock +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: FunctionGraphBlock + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionGraphBlock.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FunctionGraphBlock.arch + ~FunctionGraphBlock.basic_block + ~FunctionGraphBlock.end + ~FunctionGraphBlock.height + ~FunctionGraphBlock.lines + ~FunctionGraphBlock.outgoing_edges + ~FunctionGraphBlock.start + ~FunctionGraphBlock.width + ~FunctionGraphBlock.x + ~FunctionGraphBlock.y + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.FunctionGraphEdge.txt b/api-docs/_sources/binaryninja.binaryninja.FunctionGraphEdge.txt new file mode 100644 index 0000000..4af3420 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.FunctionGraphEdge.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.FunctionGraphEdge +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: FunctionGraphEdge + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionGraphEdge.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.FunctionParameter.txt b/api-docs/_sources/binaryninja.binaryninja.FunctionParameter.txt new file mode 100644 index 0000000..5a2d0e0 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.FunctionParameter.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.FunctionParameter +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: FunctionParameter + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionParameter.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.FunctionRecognizer.txt b/api-docs/_sources/binaryninja.binaryninja.FunctionRecognizer.txt new file mode 100644 index 0000000..6a2ef3c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.FunctionRecognizer.txt @@ -0,0 +1,26 @@ +binaryninja.binaryninja.FunctionRecognizer +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.HighlightColor.txt b/api-docs/_sources/binaryninja.binaryninja.HighlightColor.txt new file mode 100644 index 0000000..bf9e008 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.HighlightColor.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.HighlightColor +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: HighlightColor + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~HighlightColor.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ILFlag.txt b/api-docs/_sources/binaryninja.binaryninja.ILFlag.txt new file mode 100644 index 0000000..f8a4c96 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ILFlag.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ILFlag +============================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ILFlag + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILFlag.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ILIntrinsic.txt b/api-docs/_sources/binaryninja.binaryninja.ILIntrinsic.txt new file mode 100644 index 0000000..80b317a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ILIntrinsic.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ILIntrinsic +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ILIntrinsic + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILIntrinsic.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ILRegister.txt b/api-docs/_sources/binaryninja.binaryninja.ILRegister.txt new file mode 100644 index 0000000..9b8d4e0 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ILRegister.txt @@ -0,0 +1,28 @@ +binaryninja.binaryninja.ILRegister +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ILRegister + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILRegister.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ILRegister.info + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ILRegisterStack.txt b/api-docs/_sources/binaryninja.binaryninja.ILRegisterStack.txt new file mode 100644 index 0000000..23e4821 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ILRegisterStack.txt @@ -0,0 +1,28 @@ +binaryninja.binaryninja.ILRegisterStack +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ILRegisterStack + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILRegisterStack.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ILRegisterStack.info + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ILSemanticFlagClass.txt b/api-docs/_sources/binaryninja.binaryninja.ILSemanticFlagClass.txt new file mode 100644 index 0000000..019d1d0 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ILSemanticFlagClass.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ILSemanticFlagClass +=========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ILSemanticFlagClass + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILSemanticFlagClass.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ILSemanticFlagGroup.txt b/api-docs/_sources/binaryninja.binaryninja.ILSemanticFlagGroup.txt new file mode 100644 index 0000000..ef07980 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ILSemanticFlagGroup.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ILSemanticFlagGroup +=========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ILSemanticFlagGroup + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILSemanticFlagGroup.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.IndirectBranchInfo.txt b/api-docs/_sources/binaryninja.binaryninja.IndirectBranchInfo.txt new file mode 100644 index 0000000..36d5bcc --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.IndirectBranchInfo.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.IndirectBranchInfo +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: IndirectBranchInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IndirectBranchInfo.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.InstructionBranch.txt b/api-docs/_sources/binaryninja.binaryninja.InstructionBranch.txt new file mode 100644 index 0000000..e216645 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.InstructionBranch.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.InstructionBranch +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: InstructionBranch + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionBranch.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.InstructionInfo.txt b/api-docs/_sources/binaryninja.binaryninja.InstructionInfo.txt new file mode 100644 index 0000000..b1c2ce5 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.InstructionInfo.txt @@ -0,0 +1,23 @@ +binaryninja.binaryninja.InstructionInfo +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: InstructionInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionInfo.__init__ + ~InstructionInfo.add_branch + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.InstructionTextToken.txt b/api-docs/_sources/binaryninja.binaryninja.InstructionTextToken.txt new file mode 100644 index 0000000..58936ff --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.InstructionTextToken.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.InstructionTextToken +============================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: InstructionTextToken + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionTextToken.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.IntegerField.txt b/api-docs/_sources/binaryninja.binaryninja.IntegerField.txt new file mode 100644 index 0000000..0f27b74 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.IntegerField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.IntegerField +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: IntegerField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IntegerField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.InteractionHandler.txt b/api-docs/_sources/binaryninja.binaryninja.InteractionHandler.txt new file mode 100644 index 0000000..06e5b5e --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.InteractionHandler.txt @@ -0,0 +1,35 @@ +binaryninja.binaryninja.InteractionHandler +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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_html_report + ~InteractionHandler.show_markdown_report + ~InteractionHandler.show_message_box + ~InteractionHandler.show_plain_text_report + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.IntrinsicInfo.txt b/api-docs/_sources/binaryninja.binaryninja.IntrinsicInfo.txt new file mode 100644 index 0000000..5b05701 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.IntrinsicInfo.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.IntrinsicInfo +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: IntrinsicInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IntrinsicInfo.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.IntrinsicInput.txt b/api-docs/_sources/binaryninja.binaryninja.IntrinsicInput.txt new file mode 100644 index 0000000..409ac22 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.IntrinsicInput.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.IntrinsicInput +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: IntrinsicInput + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IntrinsicInput.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LLIL_GET_TEMP_REG_INDEX.txt b/api-docs/_sources/binaryninja.binaryninja.LLIL_GET_TEMP_REG_INDEX.txt new file mode 100644 index 0000000..fbc1520 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LLIL_GET_TEMP_REG_INDEX.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.LLIL_GET_TEMP_REG_INDEX +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: LLIL_GET_TEMP_REG_INDEX \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LLIL_REG_IS_TEMP.txt b/api-docs/_sources/binaryninja.binaryninja.LLIL_REG_IS_TEMP.txt new file mode 100644 index 0000000..bfa9f84 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LLIL_REG_IS_TEMP.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.LLIL_REG_IS_TEMP +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: LLIL_REG_IS_TEMP \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LLIL_TEMP.txt b/api-docs/_sources/binaryninja.binaryninja.LLIL_TEMP.txt new file mode 100644 index 0000000..755ef4a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LLIL_TEMP.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.LLIL_TEMP +================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: LLIL_TEMP \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LabelField.txt b/api-docs/_sources/binaryninja.binaryninja.LabelField.txt new file mode 100644 index 0000000..1c459c9 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LabelField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.LabelField +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: LabelField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LabelField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LinearDisassemblyLine.txt b/api-docs/_sources/binaryninja.binaryninja.LinearDisassemblyLine.txt new file mode 100644 index 0000000..b91d470 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LinearDisassemblyLine.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.LinearDisassemblyLine +============================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: LinearDisassemblyLine + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LinearDisassemblyLine.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LinearDisassemblyPosition.txt b/api-docs/_sources/binaryninja.binaryninja.LinearDisassemblyPosition.txt new file mode 100644 index 0000000..3faf647 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LinearDisassemblyPosition.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.LinearDisassemblyPosition +================================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: LinearDisassemblyPosition + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LinearDisassemblyPosition.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LookupTableEntry.txt b/api-docs/_sources/binaryninja.binaryninja.LookupTableEntry.txt new file mode 100644 index 0000000..ae5b4d6 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LookupTableEntry.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.LookupTableEntry +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: LookupTableEntry + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LookupTableEntry.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LowLevelILBasicBlock.txt b/api-docs/_sources/binaryninja.binaryninja.LowLevelILBasicBlock.txt new file mode 100644 index 0000000..955b4eb --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LowLevelILBasicBlock.txt @@ -0,0 +1,53 @@ +binaryninja.binaryninja.LowLevelILBasicBlock +============================================ + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.LowLevelILExpr.txt b/api-docs/_sources/binaryninja.binaryninja.LowLevelILExpr.txt new file mode 100644 index 0000000..0344abd --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LowLevelILExpr.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.LowLevelILExpr +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: LowLevelILExpr + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILExpr.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LowLevelILFunction.txt b/api-docs/_sources/binaryninja.binaryninja.LowLevelILFunction.txt new file mode 100644 index 0000000..720ab32 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LowLevelILFunction.txt @@ -0,0 +1,162 @@ +binaryninja.binaryninja.LowLevelILFunction +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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.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.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.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/api-docs/_sources/binaryninja.binaryninja.LowLevelILInstruction.txt b/api-docs/_sources/binaryninja.binaryninja.LowLevelILInstruction.txt new file mode 100644 index 0000000..d1c203a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LowLevelILInstruction.txt @@ -0,0 +1,49 @@ +binaryninja.binaryninja.LowLevelILInstruction +============================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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.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/api-docs/_sources/binaryninja.binaryninja.LowLevelILLabel.txt b/api-docs/_sources/binaryninja.binaryninja.LowLevelILLabel.txt new file mode 100644 index 0000000..10faa7b --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LowLevelILLabel.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.LowLevelILLabel +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: LowLevelILLabel + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILLabel.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.LowLevelILOperationAndSize.txt b/api-docs/_sources/binaryninja.binaryninja.LowLevelILOperationAndSize.txt new file mode 100644 index 0000000..cb20cf5 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.LowLevelILOperationAndSize.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.LowLevelILOperationAndSize +================================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: LowLevelILOperationAndSize + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILOperationAndSize.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.MainThreadAction.txt b/api-docs/_sources/binaryninja.binaryninja.MainThreadAction.txt new file mode 100644 index 0000000..77d0cb9 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MainThreadAction.txt @@ -0,0 +1,30 @@ +binaryninja.binaryninja.MainThreadAction +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.MainThreadActionHandler.txt b/api-docs/_sources/binaryninja.binaryninja.MainThreadActionHandler.txt new file mode 100644 index 0000000..3eda5de --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MainThreadActionHandler.txt @@ -0,0 +1,24 @@ +binaryninja.binaryninja.MainThreadActionHandler +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: MainThreadActionHandler + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MainThreadActionHandler.__init__ + ~MainThreadActionHandler.add_action + ~MainThreadActionHandler.register + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.MediumLevelILBasicBlock.txt b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILBasicBlock.txt new file mode 100644 index 0000000..c9c9388 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILBasicBlock.txt @@ -0,0 +1,53 @@ +binaryninja.binaryninja.MediumLevelILBasicBlock +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.MediumLevelILExpr.txt b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILExpr.txt new file mode 100644 index 0000000..7d38d88 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILExpr.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.MediumLevelILExpr +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: MediumLevelILExpr + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILExpr.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.MediumLevelILFunction.txt b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILFunction.txt new file mode 100644 index 0000000..c14f20c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILFunction.txt @@ -0,0 +1,55 @@ +binaryninja.binaryninja.MediumLevelILFunction +============================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: MediumLevelILFunction + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILFunction.__init__ + ~MediumLevelILFunction.add_label_list + ~MediumLevelILFunction.add_operand_list + ~MediumLevelILFunction.append + ~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.low_level_il + ~MediumLevelILFunction.non_ssa_form + ~MediumLevelILFunction.ssa_form + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.MediumLevelILInstruction.txt b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILInstruction.txt new file mode 100644 index 0000000..c3fa15a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILInstruction.txt @@ -0,0 +1,59 @@ +binaryninja.binaryninja.MediumLevelILInstruction +================================================ + +.. currentmodule:: binaryninja.binaryninja + +.. 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.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/api-docs/_sources/binaryninja.binaryninja.MediumLevelILLabel.txt b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILLabel.txt new file mode 100644 index 0000000..1d3d7d7 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILLabel.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.MediumLevelILLabel +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: MediumLevelILLabel + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILLabel.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.MediumLevelILOperationAndSize.txt b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILOperationAndSize.txt new file mode 100644 index 0000000..993f369 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MediumLevelILOperationAndSize.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.MediumLevelILOperationAndSize +===================================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: MediumLevelILOperationAndSize + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILOperationAndSize.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Metadata.txt b/api-docs/_sources/binaryninja.binaryninja.Metadata.txt new file mode 100644 index 0000000..4098824 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Metadata.txt @@ -0,0 +1,40 @@ +binaryninja.binaryninja.Metadata +================================ + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.MultilineTextField.txt b/api-docs/_sources/binaryninja.binaryninja.MultilineTextField.txt new file mode 100644 index 0000000..8b7d7e8 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.MultilineTextField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.MultilineTextField +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: MultilineTextField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MultilineTextField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.NamedTypeReference.txt b/api-docs/_sources/binaryninja.binaryninja.NamedTypeReference.txt new file mode 100644 index 0000000..883bdaa --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.NamedTypeReference.txt @@ -0,0 +1,32 @@ +binaryninja.binaryninja.NamedTypeReference +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.NavigationHandler.txt b/api-docs/_sources/binaryninja.binaryninja.NavigationHandler.txt new file mode 100644 index 0000000..9126a39 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.NavigationHandler.txt @@ -0,0 +1,16 @@ +binaryninja.binaryninja.NavigationHandler +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: NavigationHandler + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.OpenFileNameField.txt b/api-docs/_sources/binaryninja.binaryninja.OpenFileNameField.txt new file mode 100644 index 0000000..36b1c78 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.OpenFileNameField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.OpenFileNameField +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: OpenFileNameField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~OpenFileNameField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ParameterVariables.txt b/api-docs/_sources/binaryninja.binaryninja.ParameterVariables.txt new file mode 100644 index 0000000..134832a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ParameterVariables.txt @@ -0,0 +1,23 @@ +binaryninja.binaryninja.ParameterVariables +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ParameterVariables + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ParameterVariables.__init__ + ~ParameterVariables.with_confidence + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Platform.txt b/api-docs/_sources/binaryninja.binaryninja.Platform.txt new file mode 100644 index 0000000..05ab05f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Platform.txt @@ -0,0 +1,54 @@ +binaryninja.binaryninja.Platform +================================ + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.PluginCommand.txt b/api-docs/_sources/binaryninja.binaryninja.PluginCommand.txt new file mode 100644 index 0000000..3278554 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PluginCommand.txt @@ -0,0 +1,39 @@ +binaryninja.binaryninja.PluginCommand +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.PluginCommandContext.txt b/api-docs/_sources/binaryninja.binaryninja.PluginCommandContext.txt new file mode 100644 index 0000000..8661a4d --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PluginCommandContext.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.PluginCommandContext +============================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: PluginCommandContext + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PluginCommandContext.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.PluginManagerLoadPluginCallback.txt b/api-docs/_sources/binaryninja.binaryninja.PluginManagerLoadPluginCallback.txt new file mode 100644 index 0000000..8da1d1c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PluginManagerLoadPluginCallback.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.PluginManagerLoadPluginCallback +======================================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: PluginManagerLoadPluginCallback + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PluginManagerLoadPluginCallback.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.PossibleValueSet.txt b/api-docs/_sources/binaryninja.binaryninja.PossibleValueSet.txt new file mode 100644 index 0000000..b58a830 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PossibleValueSet.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.PossibleValueSet +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: PossibleValueSet + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PossibleValueSet.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.PythonDownloadInstance.txt b/api-docs/_sources/binaryninja.binaryninja.PythonDownloadInstance.txt new file mode 100644 index 0000000..6e70c7f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PythonDownloadInstance.txt @@ -0,0 +1,24 @@ +binaryninja.binaryninja.PythonDownloadInstance +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.PythonDownloadProvider.txt b/api-docs/_sources/binaryninja.binaryninja.PythonDownloadProvider.txt new file mode 100644 index 0000000..1216110 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PythonDownloadProvider.txt @@ -0,0 +1,30 @@ +binaryninja.binaryninja.PythonDownloadProvider +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.PythonScriptingInstance.txt b/api-docs/_sources/binaryninja.binaryninja.PythonScriptingInstance.txt new file mode 100644 index 0000000..8020fa7 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PythonScriptingInstance.txt @@ -0,0 +1,45 @@ +binaryninja.binaryninja.PythonScriptingInstance +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.PythonScriptingProvider.txt b/api-docs/_sources/binaryninja.binaryninja.PythonScriptingProvider.txt new file mode 100644 index 0000000..c3aa460 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.PythonScriptingProvider.txt @@ -0,0 +1,31 @@ +binaryninja.binaryninja.PythonScriptingProvider +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.QualifiedName.txt b/api-docs/_sources/binaryninja.binaryninja.QualifiedName.txt new file mode 100644 index 0000000..92cb684 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.QualifiedName.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.QualifiedName +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: QualifiedName + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QualifiedName.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ReferenceSource.txt b/api-docs/_sources/binaryninja.binaryninja.ReferenceSource.txt new file mode 100644 index 0000000..362ab2c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ReferenceSource.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ReferenceSource +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ReferenceSource + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ReferenceSource.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ReferenceTypeWithConfidence.txt b/api-docs/_sources/binaryninja.binaryninja.ReferenceTypeWithConfidence.txt new file mode 100644 index 0000000..eb829bf --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ReferenceTypeWithConfidence.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ReferenceTypeWithConfidence +=================================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ReferenceTypeWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ReferenceTypeWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.RegisterInfo.txt b/api-docs/_sources/binaryninja.binaryninja.RegisterInfo.txt new file mode 100644 index 0000000..c7e6f46 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.RegisterInfo.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.RegisterInfo +==================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: RegisterInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterInfo.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.RegisterSet.txt b/api-docs/_sources/binaryninja.binaryninja.RegisterSet.txt new file mode 100644 index 0000000..599b40e --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.RegisterSet.txt @@ -0,0 +1,23 @@ +binaryninja.binaryninja.RegisterSet +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: RegisterSet + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterSet.__init__ + ~RegisterSet.with_confidence + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.RegisterStackAdjustmentWithConfidence.txt b/api-docs/_sources/binaryninja.binaryninja.RegisterStackAdjustmentWithConfidence.txt new file mode 100644 index 0000000..9ac0f4a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.RegisterStackAdjustmentWithConfidence.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.RegisterStackAdjustmentWithConfidence +============================================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: RegisterStackAdjustmentWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterStackAdjustmentWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.RegisterStackInfo.txt b/api-docs/_sources/binaryninja.binaryninja.RegisterStackInfo.txt new file mode 100644 index 0000000..22dbdef --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.RegisterStackInfo.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.RegisterStackInfo +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: RegisterStackInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterStackInfo.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.RegisterValue.txt b/api-docs/_sources/binaryninja.binaryninja.RegisterValue.txt new file mode 100644 index 0000000..c2210cf --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.RegisterValue.txt @@ -0,0 +1,29 @@ +binaryninja.binaryninja.RegisterValue +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.RepoPlugin.txt b/api-docs/_sources/binaryninja.binaryninja.RepoPlugin.txt new file mode 100644 index 0000000..9a7c7ae --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.RepoPlugin.txt @@ -0,0 +1,41 @@ +binaryninja.binaryninja.RepoPlugin +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.Repository.txt b/api-docs/_sources/binaryninja.binaryninja.Repository.txt new file mode 100644 index 0000000..b308e0a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Repository.txt @@ -0,0 +1,34 @@ +binaryninja.binaryninja.Repository +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.RepositoryManager.txt b/api-docs/_sources/binaryninja.binaryninja.RepositoryManager.txt new file mode 100644 index 0000000..fc2e8e6 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.RepositoryManager.txt @@ -0,0 +1,37 @@ +binaryninja.binaryninja.RepositoryManager +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.SSAFlag.txt b/api-docs/_sources/binaryninja.binaryninja.SSAFlag.txt new file mode 100644 index 0000000..3b205a9 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SSAFlag.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.SSAFlag +=============================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SSAFlag + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSAFlag.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.SSARegister.txt b/api-docs/_sources/binaryninja.binaryninja.SSARegister.txt new file mode 100644 index 0000000..7c59323 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SSARegister.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.SSARegister +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SSARegister + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSARegister.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.SSARegisterOrFlag.txt b/api-docs/_sources/binaryninja.binaryninja.SSARegisterOrFlag.txt new file mode 100644 index 0000000..9bb2497 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SSARegisterOrFlag.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.SSARegisterOrFlag +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SSARegisterOrFlag + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSARegisterOrFlag.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.SSARegisterStack.txt b/api-docs/_sources/binaryninja.binaryninja.SSARegisterStack.txt new file mode 100644 index 0000000..9713034 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SSARegisterStack.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.SSARegisterStack +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SSARegisterStack + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSARegisterStack.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.SSAVariable.txt b/api-docs/_sources/binaryninja.binaryninja.SSAVariable.txt new file mode 100644 index 0000000..52c99e8 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SSAVariable.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.SSAVariable +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SSAVariable + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSAVariable.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.SaveFileNameField.txt b/api-docs/_sources/binaryninja.binaryninja.SaveFileNameField.txt new file mode 100644 index 0000000..822d31a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SaveFileNameField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.SaveFileNameField +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SaveFileNameField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SaveFileNameField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ScriptingInstance.txt b/api-docs/_sources/binaryninja.binaryninja.ScriptingInstance.txt new file mode 100644 index 0000000..9d37194 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ScriptingInstance.txt @@ -0,0 +1,45 @@ +binaryninja.binaryninja.ScriptingInstance +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.ScriptingOutputListener.txt b/api-docs/_sources/binaryninja.binaryninja.ScriptingOutputListener.txt new file mode 100644 index 0000000..e042772 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ScriptingOutputListener.txt @@ -0,0 +1,24 @@ +binaryninja.binaryninja.ScriptingOutputListener +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.ScriptingProvider.txt b/api-docs/_sources/binaryninja.binaryninja.ScriptingProvider.txt new file mode 100644 index 0000000..32a30ee --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ScriptingProvider.txt @@ -0,0 +1,32 @@ +binaryninja.binaryninja.ScriptingProvider +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.Section.txt b/api-docs/_sources/binaryninja.binaryninja.Section.txt new file mode 100644 index 0000000..a7cb619 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Section.txt @@ -0,0 +1,28 @@ +binaryninja.binaryninja.Section +=============================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: Section + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Section.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Section.end + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Segment.txt b/api-docs/_sources/binaryninja.binaryninja.Segment.txt new file mode 100644 index 0000000..4f08b0d --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Segment.txt @@ -0,0 +1,31 @@ +binaryninja.binaryninja.Segment +=============================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: Segment + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Segment.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Segment.end + ~Segment.executable + ~Segment.readable + ~Segment.writable + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.SeparatorField.txt b/api-docs/_sources/binaryninja.binaryninja.SeparatorField.txt new file mode 100644 index 0000000..b9fc513 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SeparatorField.txt @@ -0,0 +1,16 @@ +binaryninja.binaryninja.SeparatorField +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SeparatorField + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Setting.txt b/api-docs/_sources/binaryninja.binaryninja.Setting.txt new file mode 100644 index 0000000..fe90493 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Setting.txt @@ -0,0 +1,44 @@ +binaryninja.binaryninja.Setting +=============================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: Setting + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Setting.__init__ + ~Setting.get_bool + ~Setting.get_double + ~Setting.get_integer + ~Setting.get_integer_list + ~Setting.get_string + ~Setting.get_string_list + ~Setting.is_bool + ~Setting.is_double + ~Setting.is_integer + ~Setting.is_integer_list + ~Setting.is_present + ~Setting.is_string + ~Setting.is_string_list + ~Setting.remove_setting + ~Setting.remove_setting_group + ~Setting.set + ~Setting.set_bool + ~Setting.set_double + ~Setting.set_integer + ~Setting.set_integer_list + ~Setting.set_string + ~Setting.set_string_list + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.SizeWithConfidence.txt b/api-docs/_sources/binaryninja.binaryninja.SizeWithConfidence.txt new file mode 100644 index 0000000..c8a0409 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.SizeWithConfidence.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.SizeWithConfidence +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: SizeWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SizeWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.StackVariableReference.txt b/api-docs/_sources/binaryninja.binaryninja.StackVariableReference.txt new file mode 100644 index 0000000..1f4952f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.StackVariableReference.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.StackVariableReference +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: StackVariableReference + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~StackVariableReference.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.StringReference.txt b/api-docs/_sources/binaryninja.binaryninja.StringReference.txt new file mode 100644 index 0000000..1c647cd --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.StringReference.txt @@ -0,0 +1,28 @@ +binaryninja.binaryninja.StringReference +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: StringReference + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~StringReference.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~StringReference.value + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Structure.txt b/api-docs/_sources/binaryninja.binaryninja.Structure.txt new file mode 100644 index 0000000..56e0753 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Structure.txt @@ -0,0 +1,37 @@ +binaryninja.binaryninja.Structure +================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.StructureMember.txt b/api-docs/_sources/binaryninja.binaryninja.StructureMember.txt new file mode 100644 index 0000000..f52443a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.StructureMember.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.StructureMember +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: StructureMember + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~StructureMember.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Symbol.txt b/api-docs/_sources/binaryninja.binaryninja.Symbol.txt new file mode 100644 index 0000000..1a5305a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Symbol.txt @@ -0,0 +1,34 @@ +binaryninja.binaryninja.Symbol +============================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: Symbol + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Symbol.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Symbol.address + ~Symbol.auto + ~Symbol.full_name + ~Symbol.name + ~Symbol.raw_name + ~Symbol.short_name + ~Symbol.type + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.TextLineField.txt b/api-docs/_sources/binaryninja.binaryninja.TextLineField.txt new file mode 100644 index 0000000..49577b5 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.TextLineField.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.TextLineField +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: TextLineField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~TextLineField.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Transform.txt b/api-docs/_sources/binaryninja.binaryninja.Transform.txt new file mode 100644 index 0000000..69c3470 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Transform.txt @@ -0,0 +1,37 @@ +binaryninja.binaryninja.Transform +================================= + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.TransformParameter.txt b/api-docs/_sources/binaryninja.binaryninja.TransformParameter.txt new file mode 100644 index 0000000..37683e4 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.TransformParameter.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.TransformParameter +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: TransformParameter + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~TransformParameter.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Type.txt b/api-docs/_sources/binaryninja.binaryninja.Type.txt new file mode 100644 index 0000000..4c91dfa --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Type.txt @@ -0,0 +1,69 @@ +binaryninja.binaryninja.Type +============================ + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: Type + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Type.__init__ + ~Type.array + ~Type.bool + ~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/api-docs/_sources/binaryninja.binaryninja.TypeParserResult.txt b/api-docs/_sources/binaryninja.binaryninja.TypeParserResult.txt new file mode 100644 index 0000000..1258d49 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.TypeParserResult.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.TypeParserResult +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: TypeParserResult + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~TypeParserResult.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.UndoAction.txt b/api-docs/_sources/binaryninja.binaryninja.UndoAction.txt new file mode 100644 index 0000000..63e7309 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.UndoAction.txt @@ -0,0 +1,30 @@ +binaryninja.binaryninja.UndoAction +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.UpdateChannel.txt b/api-docs/_sources/binaryninja.binaryninja.UpdateChannel.txt new file mode 100644 index 0000000..d61d6eb --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.UpdateChannel.txt @@ -0,0 +1,31 @@ +binaryninja.binaryninja.UpdateChannel +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. 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/api-docs/_sources/binaryninja.binaryninja.UpdateProgressCallback.txt b/api-docs/_sources/binaryninja.binaryninja.UpdateProgressCallback.txt new file mode 100644 index 0000000..5b41afa --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.UpdateProgressCallback.txt @@ -0,0 +1,23 @@ +binaryninja.binaryninja.UpdateProgressCallback +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: UpdateProgressCallback + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~UpdateProgressCallback.__init__ + ~UpdateProgressCallback.callback + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.UpdateVersion.txt b/api-docs/_sources/binaryninja.binaryninja.UpdateVersion.txt new file mode 100644 index 0000000..3fb8f9e --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.UpdateVersion.txt @@ -0,0 +1,23 @@ +binaryninja.binaryninja.UpdateVersion +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: UpdateVersion + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~UpdateVersion.__init__ + ~UpdateVersion.update + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.ValueRange.txt b/api-docs/_sources/binaryninja.binaryninja.ValueRange.txt new file mode 100644 index 0000000..3e84bc9 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.ValueRange.txt @@ -0,0 +1,22 @@ +binaryninja.binaryninja.ValueRange +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: ValueRange + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ValueRange.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.Variable.txt b/api-docs/_sources/binaryninja.binaryninja.Variable.txt new file mode 100644 index 0000000..83c23ae --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.Variable.txt @@ -0,0 +1,23 @@ +binaryninja.binaryninja.Variable +================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autoclass:: Variable + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Variable.__init__ + ~Variable.from_identifier + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.are_auto_updates_enabled.txt b/api-docs/_sources/binaryninja.binaryninja.are_auto_updates_enabled.txt new file mode 100644 index 0000000..43a917b --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.are_auto_updates_enabled.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.are_auto_updates_enabled +================================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: are_auto_updates_enabled \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.close_logs.txt b/api-docs/_sources/binaryninja.binaryninja.close_logs.txt new file mode 100644 index 0000000..76c2b8b --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.close_logs.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.close_logs +================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: close_logs \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.cstr.txt b/api-docs/_sources/binaryninja.binaryninja.cstr.txt new file mode 100644 index 0000000..dca7ea2 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.cstr.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.cstr +============================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: cstr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.demangle_gnu3.txt b/api-docs/_sources/binaryninja.binaryninja.demangle_gnu3.txt new file mode 100644 index 0000000..5e30867 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.demangle_gnu3.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.demangle_gnu3 +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: demangle_gnu3 \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.demangle_ms.txt b/api-docs/_sources/binaryninja.binaryninja.demangle_ms.txt new file mode 100644 index 0000000..b2c1f34 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.demangle_ms.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.demangle_ms +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: demangle_ms \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.escape_string.txt b/api-docs/_sources/binaryninja.binaryninja.escape_string.txt new file mode 100644 index 0000000..b5c00d6 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.escape_string.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.escape_string +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: escape_string \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.execute_on_main_thread.txt b/api-docs/_sources/binaryninja.binaryninja.execute_on_main_thread.txt new file mode 100644 index 0000000..f08e67a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.execute_on_main_thread.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.execute_on_main_thread +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: execute_on_main_thread \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.execute_on_main_thread_and_wait.txt b/api-docs/_sources/binaryninja.binaryninja.execute_on_main_thread_and_wait.txt new file mode 100644 index 0000000..7cbe0e7 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.execute_on_main_thread_and_wait.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.execute_on_main_thread_and_wait +======================================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: execute_on_main_thread_and_wait \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_address_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_address_input.txt new file mode 100644 index 0000000..4eb5e4c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_address_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_address_input +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_address_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_choice_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_choice_input.txt new file mode 100644 index 0000000..c535151 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_choice_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_choice_input +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_choice_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_directory_name_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_directory_name_input.txt new file mode 100644 index 0000000..6f2292a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_directory_name_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_directory_name_input +================================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_directory_name_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_form_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_form_input.txt new file mode 100644 index 0000000..99c6af2 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_form_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_form_input +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_form_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_install_directory.txt b/api-docs/_sources/binaryninja.binaryninja.get_install_directory.txt new file mode 100644 index 0000000..963276b --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_install_directory.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_install_directory +============================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_install_directory \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_int_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_int_input.txt new file mode 100644 index 0000000..9580068 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_int_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_int_input +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_int_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_open_filename_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_open_filename_input.txt new file mode 100644 index 0000000..58f461d --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_open_filename_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_open_filename_input +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_open_filename_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_qualified_name.txt b/api-docs/_sources/binaryninja.binaryninja.get_qualified_name.txt new file mode 100644 index 0000000..57f1f12 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_qualified_name.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_qualified_name +========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_qualified_name \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_save_filename_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_save_filename_input.txt new file mode 100644 index 0000000..fe385b6 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_save_filename_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_save_filename_input +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_save_filename_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_text_line_input.txt b/api-docs/_sources/binaryninja.binaryninja.get_text_line_input.txt new file mode 100644 index 0000000..2b37e72 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_text_line_input.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_text_line_input +=========================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_text_line_input \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_time_since_last_update_check.txt b/api-docs/_sources/binaryninja.binaryninja.get_time_since_last_update_check.txt new file mode 100644 index 0000000..d2beb15 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_time_since_last_update_check.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_time_since_last_update_check +======================================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_time_since_last_update_check \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_unique_identifier.txt b/api-docs/_sources/binaryninja.binaryninja.get_unique_identifier.txt new file mode 100644 index 0000000..b96dabe --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_unique_identifier.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_unique_identifier +============================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_unique_identifier \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.get_worker_thread_count.txt b/api-docs/_sources/binaryninja.binaryninja.get_worker_thread_count.txt new file mode 100644 index 0000000..063491f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.get_worker_thread_count.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.get_worker_thread_count +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: get_worker_thread_count \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.install_pending_update.txt b/api-docs/_sources/binaryninja.binaryninja.install_pending_update.txt new file mode 100644 index 0000000..8f4cf9f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.install_pending_update.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.install_pending_update +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: install_pending_update \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.is_output_redirected_to_log.txt b/api-docs/_sources/binaryninja.binaryninja.is_output_redirected_to_log.txt new file mode 100644 index 0000000..8871d5e --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.is_output_redirected_to_log.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.is_output_redirected_to_log +=================================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: is_output_redirected_to_log \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.is_update_installation_pending.txt b/api-docs/_sources/binaryninja.binaryninja.is_update_installation_pending.txt new file mode 100644 index 0000000..61c8ce4 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.is_update_installation_pending.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.is_update_installation_pending +====================================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: is_update_installation_pending \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_alert.txt b/api-docs/_sources/binaryninja.binaryninja.log_alert.txt new file mode 100644 index 0000000..093c54d --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_alert.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_alert +================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_alert \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_debug.txt b/api-docs/_sources/binaryninja.binaryninja.log_debug.txt new file mode 100644 index 0000000..7146d4f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_debug.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_debug +================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_debug \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_error.txt b/api-docs/_sources/binaryninja.binaryninja.log_error.txt new file mode 100644 index 0000000..8b7c4d3 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_error.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_error +================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_error \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_info.txt b/api-docs/_sources/binaryninja.binaryninja.log_info.txt new file mode 100644 index 0000000..4067117 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_info.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_info +================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_info \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_to_file.txt b/api-docs/_sources/binaryninja.binaryninja.log_to_file.txt new file mode 100644 index 0000000..31c44df --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_to_file.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_to_file +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_to_file \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_to_stderr.txt b/api-docs/_sources/binaryninja.binaryninja.log_to_stderr.txt new file mode 100644 index 0000000..cce5248 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_to_stderr.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_to_stderr +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_to_stderr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_to_stdout.txt b/api-docs/_sources/binaryninja.binaryninja.log_to_stdout.txt new file mode 100644 index 0000000..b817ae5 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_to_stdout.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_to_stdout +===================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_to_stdout \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.log_warn.txt b/api-docs/_sources/binaryninja.binaryninja.log_warn.txt new file mode 100644 index 0000000..046cf3e --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.log_warn.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.log_warn +================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: log_warn \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.markdown_to_html.txt b/api-docs/_sources/binaryninja.binaryninja.markdown_to_html.txt new file mode 100644 index 0000000..201a30c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.markdown_to_html.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.markdown_to_html +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: markdown_to_html \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.preprocess_source.txt b/api-docs/_sources/binaryninja.binaryninja.preprocess_source.txt new file mode 100644 index 0000000..37f63aa --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.preprocess_source.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.preprocess_source +========================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: preprocess_source \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.pyNativeStr.txt b/api-docs/_sources/binaryninja.binaryninja.pyNativeStr.txt new file mode 100644 index 0000000..aee2d59 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.pyNativeStr.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.pyNativeStr +=================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.range.txt b/api-docs/_sources/binaryninja.binaryninja.range.txt new file mode 100644 index 0000000..c414061 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.range.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.range +============================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.redirect_output_to_log.txt b/api-docs/_sources/binaryninja.binaryninja.redirect_output_to_log.txt new file mode 100644 index 0000000..2e873ec --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.redirect_output_to_log.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.redirect_output_to_log +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: redirect_output_to_log \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.redirect_stdio.txt b/api-docs/_sources/binaryninja.binaryninja.redirect_stdio.txt new file mode 100644 index 0000000..f068d22 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.redirect_stdio.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.redirect_stdio +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: redirect_stdio \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.set_auto_updates_enabled.txt b/api-docs/_sources/binaryninja.binaryninja.set_auto_updates_enabled.txt new file mode 100644 index 0000000..840fca4 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.set_auto_updates_enabled.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.set_auto_updates_enabled +================================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: set_auto_updates_enabled \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.set_worker_thread_count.txt b/api-docs/_sources/binaryninja.binaryninja.set_worker_thread_count.txt new file mode 100644 index 0000000..13a6bf7 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.set_worker_thread_count.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.set_worker_thread_count +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: set_worker_thread_count \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.show_html_report.txt b/api-docs/_sources/binaryninja.binaryninja.show_html_report.txt new file mode 100644 index 0000000..23a6d34 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.show_html_report.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.show_html_report +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: show_html_report \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.show_markdown_report.txt b/api-docs/_sources/binaryninja.binaryninja.show_markdown_report.txt new file mode 100644 index 0000000..ca65b02 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.show_markdown_report.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.show_markdown_report +============================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: show_markdown_report \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.show_message_box.txt b/api-docs/_sources/binaryninja.binaryninja.show_message_box.txt new file mode 100644 index 0000000..50c3ec5 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.show_message_box.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.show_message_box +======================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: show_message_box \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.show_plain_text_report.txt b/api-docs/_sources/binaryninja.binaryninja.show_plain_text_report.txt new file mode 100644 index 0000000..f2c8c95 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.show_plain_text_report.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.show_plain_text_report +============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: show_plain_text_report \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.shutdown.txt b/api-docs/_sources/binaryninja.binaryninja.shutdown.txt new file mode 100644 index 0000000..04fea40 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.shutdown.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.shutdown +================================ + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: shutdown \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.unescape_string.txt b/api-docs/_sources/binaryninja.binaryninja.unescape_string.txt new file mode 100644 index 0000000..329455f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.unescape_string.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.unescape_string +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: unescape_string \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.updates_checked.txt b/api-docs/_sources/binaryninja.binaryninja.updates_checked.txt new file mode 100644 index 0000000..548f4a6 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.updates_checked.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.updates_checked +======================================= + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: updates_checked \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.with_metaclass.txt b/api-docs/_sources/binaryninja.binaryninja.with_metaclass.txt new file mode 100644 index 0000000..3b93b2a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.with_metaclass +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.worker_enqueue.txt b/api-docs/_sources/binaryninja.binaryninja.worker_enqueue.txt new file mode 100644 index 0000000..36e33ea --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.worker_enqueue.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.worker_enqueue +====================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: worker_enqueue \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.worker_interactive_enqueue.txt b/api-docs/_sources/binaryninja.binaryninja.worker_interactive_enqueue.txt new file mode 100644 index 0000000..d3d0195 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.worker_interactive_enqueue.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.worker_interactive_enqueue +================================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: worker_interactive_enqueue \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryninja.worker_priority_enqueue.txt b/api-docs/_sources/binaryninja.binaryninja.worker_priority_enqueue.txt new file mode 100644 index 0000000..aa6cb5a --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryninja.worker_priority_enqueue.txt @@ -0,0 +1,6 @@ +binaryninja.binaryninja.worker_priority_enqueue +=============================================== + +.. currentmodule:: binaryninja.binaryninja + +.. autofunction:: worker_priority_enqueue \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryview-module.txt b/api-docs/_sources/binaryninja.binaryview-module.txt new file mode 100644 index 0000000..ed8f9e6 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview-module.txt @@ -0,0 +1,32 @@ +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.Section + binaryninja.binaryview.Segment + binaryninja.binaryview.StringReference + 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/api-docs/_sources/binaryninja.binaryview.ActiveAnalysisInfo.txt b/api-docs/_sources/binaryninja.binaryview.ActiveAnalysisInfo.txt new file mode 100644 index 0000000..1965da5 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.ActiveAnalysisInfo.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/api-docs/_sources/binaryninja.binaryview.AddressRange.txt b/api-docs/_sources/binaryninja.binaryview.AddressRange.txt new file mode 100644 index 0000000..2501d6c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.AddressRange.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/api-docs/_sources/binaryninja.binaryview.AnalysisCompletionEvent.txt b/api-docs/_sources/binaryninja.binaryview.AnalysisCompletionEvent.txt new file mode 100644 index 0000000..faabe4f --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.AnalysisCompletionEvent.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/api-docs/_sources/binaryninja.binaryview.AnalysisInfo.txt b/api-docs/_sources/binaryninja.binaryview.AnalysisInfo.txt new file mode 100644 index 0000000..d83f424 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.AnalysisInfo.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/api-docs/_sources/binaryninja.binaryview.AnalysisProgress.txt b/api-docs/_sources/binaryninja.binaryview.AnalysisProgress.txt new file mode 100644 index 0000000..4854e7b --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.AnalysisProgress.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/api-docs/_sources/binaryninja.binaryview.BinaryDataNotification.txt b/api-docs/_sources/binaryninja.binaryview.BinaryDataNotification.txt new file mode 100644 index 0000000..f13bb4d --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.BinaryDataNotification.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/api-docs/_sources/binaryninja.binaryview.BinaryDataNotificationCallbacks.txt b/api-docs/_sources/binaryninja.binaryview.BinaryDataNotificationCallbacks.txt new file mode 100644 index 0000000..bd26a54 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.BinaryDataNotificationCallbacks.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/api-docs/_sources/binaryninja.binaryview.BinaryReader.txt b/api-docs/_sources/binaryninja.binaryview.BinaryReader.txt new file mode 100644 index 0000000..2913393 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.BinaryReader.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/api-docs/_sources/binaryninja.binaryview.BinaryView.txt b/api-docs/_sources/binaryninja.binaryview.BinaryView.txt new file mode 100644 index 0000000..de47a7c --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.BinaryView.txt @@ -0,0 +1,216 @@ +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.find_next_data + ~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_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.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_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_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.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_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.next_address + ~BinaryView.offset + ~BinaryView.parameters_for_analysis + ~BinaryView.parent_view + ~BinaryView.platform + ~BinaryView.registered_view_type + ~BinaryView.relocatable + ~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/api-docs/_sources/binaryninja.binaryview.BinaryViewType.txt b/api-docs/_sources/binaryninja.binaryview.BinaryViewType.txt new file mode 100644 index 0000000..963b613 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.BinaryViewType.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/api-docs/_sources/binaryninja.binaryview.BinaryWriter.txt b/api-docs/_sources/binaryninja.binaryview.BinaryWriter.txt new file mode 100644 index 0000000..b3592ec --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.BinaryWriter.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/api-docs/_sources/binaryninja.binaryview.DataVariable.txt b/api-docs/_sources/binaryninja.binaryview.DataVariable.txt new file mode 100644 index 0000000..d214e71 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.DataVariable.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/api-docs/_sources/binaryninja.binaryview.Section.txt b/api-docs/_sources/binaryninja.binaryview.Section.txt new file mode 100644 index 0000000..9d7d982 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.Section.txt @@ -0,0 +1,28 @@ +binaryninja.binaryview.Section +============================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: Section + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Section.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Section.end + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryview.Segment.txt b/api-docs/_sources/binaryninja.binaryview.Segment.txt new file mode 100644 index 0000000..6b7d3ae --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.Segment.txt @@ -0,0 +1,31 @@ +binaryninja.binaryview.Segment +============================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: Segment + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Segment.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Segment.end + ~Segment.executable + ~Segment.readable + ~Segment.writable + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryview.StringReference.txt b/api-docs/_sources/binaryninja.binaryview.StringReference.txt new file mode 100644 index 0000000..ce41852 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.StringReference.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/api-docs/_sources/binaryninja.binaryview.range.txt b/api-docs/_sources/binaryninja.binaryview.range.txt new file mode 100644 index 0000000..e8f03a2 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.range.txt @@ -0,0 +1,6 @@ +binaryninja.binaryview.range +============================ + +.. currentmodule:: binaryninja.binaryview + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.binaryview.with_metaclass.txt b/api-docs/_sources/binaryninja.binaryview.with_metaclass.txt new file mode 100644 index 0000000..9055d72 --- /dev/null +++ b/api-docs/_sources/binaryninja.binaryview.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.binaryview.with_metaclass +===================================== + +.. currentmodule:: binaryninja.binaryview + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins-module.txt b/api-docs/_sources/binaryninja.builtins-module.txt new file mode 100644 index 0000000..082bc17 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins-module.txt @@ -0,0 +1,98 @@ +builtins module +===================== + +.. autosummary:: + :toctree: + + binaryninja.builtins.ArithmeticError + binaryninja.builtins.AssertionError + binaryninja.builtins.AttributeError + binaryninja.builtins.BaseException + binaryninja.builtins.BufferError + binaryninja.builtins.BytesWarning + binaryninja.builtins.DeprecationWarning + binaryninja.builtins.EOFError + binaryninja.builtins.EnvironmentError + binaryninja.builtins.Exception + binaryninja.builtins.FloatingPointError + binaryninja.builtins.FutureWarning + binaryninja.builtins.GeneratorExit + binaryninja.builtins.IOError + binaryninja.builtins.ImportError + binaryninja.builtins.ImportWarning + binaryninja.builtins.IndentationError + binaryninja.builtins.IndexError + binaryninja.builtins.KeyError + binaryninja.builtins.KeyboardInterrupt + binaryninja.builtins.LookupError + binaryninja.builtins.MemoryError + binaryninja.builtins.NameError + binaryninja.builtins.NotImplementedError + binaryninja.builtins.OSError + binaryninja.builtins.OverflowError + binaryninja.builtins.PendingDeprecationWarning + binaryninja.builtins.ReferenceError + binaryninja.builtins.RuntimeError + binaryninja.builtins.RuntimeWarning + binaryninja.builtins.StandardError + binaryninja.builtins.StopIteration + binaryninja.builtins.SyntaxError + binaryninja.builtins.SyntaxWarning + binaryninja.builtins.SystemError + binaryninja.builtins.SystemExit + binaryninja.builtins.TabError + binaryninja.builtins.TypeError + binaryninja.builtins.UnboundLocalError + binaryninja.builtins.UnicodeDecodeError + binaryninja.builtins.UnicodeEncodeError + binaryninja.builtins.UnicodeError + binaryninja.builtins.UnicodeTranslateError + binaryninja.builtins.UnicodeWarning + binaryninja.builtins.UserWarning + binaryninja.builtins.ValueError + binaryninja.builtins.Warning + binaryninja.builtins.ZeroDivisionError + binaryninja.builtins.basestring + binaryninja.builtins.bool + binaryninja.builtins.buffer + binaryninja.builtins.bytearray + binaryninja.builtins.bytes + binaryninja.builtins.classmethod + binaryninja.builtins.complex + binaryninja.builtins.dict + binaryninja.builtins.enumerate + binaryninja.builtins.file + binaryninja.builtins.filter + binaryninja.builtins.float + binaryninja.builtins.frozenset + binaryninja.builtins.int + binaryninja.builtins.list + binaryninja.builtins.long + binaryninja.builtins.map + binaryninja.builtins.memoryview + binaryninja.builtins.object + binaryninja.builtins.property + binaryninja.builtins.range + binaryninja.builtins.reversed + binaryninja.builtins.set + binaryninja.builtins.slice + binaryninja.builtins.staticmethod + binaryninja.builtins.str + binaryninja.builtins.tuple + binaryninja.builtins.type + binaryninja.builtins.unicode + binaryninja.builtins.xrange + binaryninja.builtins.zip + binaryninja.builtins.next + binaryninja.builtins.pow + binaryninja.builtins.round + binaryninja.builtins.super + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.builtins + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.ArithmeticError.txt b/api-docs/_sources/binaryninja.builtins.ArithmeticError.txt new file mode 100644 index 0000000..6beedec --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.ArithmeticError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.ArithmeticError +==================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: ArithmeticError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.AssertionError.txt b/api-docs/_sources/binaryninja.builtins.AssertionError.txt new file mode 100644 index 0000000..56e0c43 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.AssertionError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.AssertionError +=================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: AssertionError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.AttributeError.txt b/api-docs/_sources/binaryninja.builtins.AttributeError.txt new file mode 100644 index 0000000..08b3eca --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.AttributeError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.AttributeError +=================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: AttributeError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.BaseException.txt b/api-docs/_sources/binaryninja.builtins.BaseException.txt new file mode 100644 index 0000000..047b78d --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.BaseException.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.BaseException +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: BaseException \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.BufferError.txt b/api-docs/_sources/binaryninja.builtins.BufferError.txt new file mode 100644 index 0000000..8a455bc --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.BufferError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.BufferError +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: BufferError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.BytesWarning.txt b/api-docs/_sources/binaryninja.builtins.BytesWarning.txt new file mode 100644 index 0000000..ed45c58 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.BytesWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.BytesWarning +================================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: BytesWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.DeprecationWarning.txt b/api-docs/_sources/binaryninja.builtins.DeprecationWarning.txt new file mode 100644 index 0000000..89e5d58 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.DeprecationWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.DeprecationWarning +======================================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: DeprecationWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.EOFError.txt b/api-docs/_sources/binaryninja.builtins.EOFError.txt new file mode 100644 index 0000000..848948e --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.EOFError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.EOFError +============================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: EOFError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.EnvironmentError.txt b/api-docs/_sources/binaryninja.builtins.EnvironmentError.txt new file mode 100644 index 0000000..a56e68d --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.EnvironmentError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.EnvironmentError +===================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: EnvironmentError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.Exception.txt b/api-docs/_sources/binaryninja.builtins.Exception.txt new file mode 100644 index 0000000..dabbcea --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.Exception.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.Exception +============================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: Exception \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.FloatingPointError.txt b/api-docs/_sources/binaryninja.builtins.FloatingPointError.txt new file mode 100644 index 0000000..4bc70bd --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.FloatingPointError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.FloatingPointError +======================================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: FloatingPointError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.FutureWarning.txt b/api-docs/_sources/binaryninja.builtins.FutureWarning.txt new file mode 100644 index 0000000..126dabc --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.FutureWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.FutureWarning +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: FutureWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.GeneratorExit.txt b/api-docs/_sources/binaryninja.builtins.GeneratorExit.txt new file mode 100644 index 0000000..fba04d8 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.GeneratorExit.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.GeneratorExit +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: GeneratorExit \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.IOError.txt b/api-docs/_sources/binaryninja.builtins.IOError.txt new file mode 100644 index 0000000..65ab785 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.IOError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.IOError +============================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: IOError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.ImportError.txt b/api-docs/_sources/binaryninja.builtins.ImportError.txt new file mode 100644 index 0000000..74aed8d --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.ImportError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.ImportError +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: ImportError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.ImportWarning.txt b/api-docs/_sources/binaryninja.builtins.ImportWarning.txt new file mode 100644 index 0000000..9944535 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.ImportWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.ImportWarning +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: ImportWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.IndentationError.txt b/api-docs/_sources/binaryninja.builtins.IndentationError.txt new file mode 100644 index 0000000..e3be20c --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.IndentationError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.IndentationError +===================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: IndentationError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.IndexError.txt b/api-docs/_sources/binaryninja.builtins.IndexError.txt new file mode 100644 index 0000000..a919439 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.IndexError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.IndexError +=============================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: IndexError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.KeyError.txt b/api-docs/_sources/binaryninja.builtins.KeyError.txt new file mode 100644 index 0000000..163a570 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.KeyError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.KeyError +============================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: KeyError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.KeyboardInterrupt.txt b/api-docs/_sources/binaryninja.builtins.KeyboardInterrupt.txt new file mode 100644 index 0000000..78adb77 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.KeyboardInterrupt.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.KeyboardInterrupt +====================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: KeyboardInterrupt \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.LookupError.txt b/api-docs/_sources/binaryninja.builtins.LookupError.txt new file mode 100644 index 0000000..985e365 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.LookupError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.LookupError +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: LookupError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.MemoryError.txt b/api-docs/_sources/binaryninja.builtins.MemoryError.txt new file mode 100644 index 0000000..ba24073 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.MemoryError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.MemoryError +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: MemoryError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.NameError.txt b/api-docs/_sources/binaryninja.builtins.NameError.txt new file mode 100644 index 0000000..454f720 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.NameError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.NameError +============================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: NameError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.NotImplementedError.txt b/api-docs/_sources/binaryninja.builtins.NotImplementedError.txt new file mode 100644 index 0000000..0bab6bc --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.NotImplementedError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.NotImplementedError +======================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: NotImplementedError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.OSError.txt b/api-docs/_sources/binaryninja.builtins.OSError.txt new file mode 100644 index 0000000..e0e38d6 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.OSError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.OSError +============================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: OSError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.OverflowError.txt b/api-docs/_sources/binaryninja.builtins.OverflowError.txt new file mode 100644 index 0000000..f16060d --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.OverflowError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.OverflowError +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: OverflowError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.PendingDeprecationWarning.txt b/api-docs/_sources/binaryninja.builtins.PendingDeprecationWarning.txt new file mode 100644 index 0000000..a619466 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.PendingDeprecationWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.PendingDeprecationWarning +============================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: PendingDeprecationWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.ReferenceError.txt b/api-docs/_sources/binaryninja.builtins.ReferenceError.txt new file mode 100644 index 0000000..31ec2ed --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.ReferenceError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.ReferenceError +=================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: ReferenceError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.RuntimeError.txt b/api-docs/_sources/binaryninja.builtins.RuntimeError.txt new file mode 100644 index 0000000..a917914 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.RuntimeError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.RuntimeError +================================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: RuntimeError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.RuntimeWarning.txt b/api-docs/_sources/binaryninja.builtins.RuntimeWarning.txt new file mode 100644 index 0000000..ad58daa --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.RuntimeWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.RuntimeWarning +=================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: RuntimeWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.StandardError.txt b/api-docs/_sources/binaryninja.builtins.StandardError.txt new file mode 100644 index 0000000..ba72b41 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.StandardError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.StandardError +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: StandardError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.StopIteration.txt b/api-docs/_sources/binaryninja.builtins.StopIteration.txt new file mode 100644 index 0000000..51f86ef --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.StopIteration.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.StopIteration +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: StopIteration \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.SyntaxError.txt b/api-docs/_sources/binaryninja.builtins.SyntaxError.txt new file mode 100644 index 0000000..dec2564 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.SyntaxError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.SyntaxError +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: SyntaxError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.SyntaxWarning.txt b/api-docs/_sources/binaryninja.builtins.SyntaxWarning.txt new file mode 100644 index 0000000..0a759ac --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.SyntaxWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.SyntaxWarning +================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: SyntaxWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.SystemError.txt b/api-docs/_sources/binaryninja.builtins.SystemError.txt new file mode 100644 index 0000000..58a3948 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.SystemError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.SystemError +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: SystemError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.SystemExit.txt b/api-docs/_sources/binaryninja.builtins.SystemExit.txt new file mode 100644 index 0000000..478f0ea --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.SystemExit.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.SystemExit +=============================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: SystemExit \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.TabError.txt b/api-docs/_sources/binaryninja.builtins.TabError.txt new file mode 100644 index 0000000..457200c --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.TabError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.TabError +============================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: TabError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.TypeError.txt b/api-docs/_sources/binaryninja.builtins.TypeError.txt new file mode 100644 index 0000000..d192e81 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.TypeError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.TypeError +============================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: TypeError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.UnboundLocalError.txt b/api-docs/_sources/binaryninja.builtins.UnboundLocalError.txt new file mode 100644 index 0000000..d78cd1a --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.UnboundLocalError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.UnboundLocalError +====================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: UnboundLocalError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.UnicodeDecodeError.txt b/api-docs/_sources/binaryninja.builtins.UnicodeDecodeError.txt new file mode 100644 index 0000000..85dcd1a --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.UnicodeDecodeError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.UnicodeDecodeError +======================================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: UnicodeDecodeError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.UnicodeEncodeError.txt b/api-docs/_sources/binaryninja.builtins.UnicodeEncodeError.txt new file mode 100644 index 0000000..d12be22 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.UnicodeEncodeError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.UnicodeEncodeError +======================================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: UnicodeEncodeError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.UnicodeError.txt b/api-docs/_sources/binaryninja.builtins.UnicodeError.txt new file mode 100644 index 0000000..d1594c6 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.UnicodeError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.UnicodeError +================================= + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: UnicodeError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.UnicodeTranslateError.txt b/api-docs/_sources/binaryninja.builtins.UnicodeTranslateError.txt new file mode 100644 index 0000000..4b17da3 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.UnicodeTranslateError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.UnicodeTranslateError +========================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: UnicodeTranslateError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.UnicodeWarning.txt b/api-docs/_sources/binaryninja.builtins.UnicodeWarning.txt new file mode 100644 index 0000000..c82322a --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.UnicodeWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.UnicodeWarning +=================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: UnicodeWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.UserWarning.txt b/api-docs/_sources/binaryninja.builtins.UserWarning.txt new file mode 100644 index 0000000..d5a88a6 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.UserWarning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.UserWarning +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: UserWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.ValueError.txt b/api-docs/_sources/binaryninja.builtins.ValueError.txt new file mode 100644 index 0000000..892c2ea --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.ValueError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.ValueError +=============================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: ValueError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.Warning.txt b/api-docs/_sources/binaryninja.builtins.Warning.txt new file mode 100644 index 0000000..34143ae --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.Warning.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.Warning +============================ + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: Warning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.ZeroDivisionError.txt b/api-docs/_sources/binaryninja.builtins.ZeroDivisionError.txt new file mode 100644 index 0000000..f0fe132 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.ZeroDivisionError.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.ZeroDivisionError +====================================== + +.. currentmodule:: binaryninja.builtins + +.. autoexception:: ZeroDivisionError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.basestring.txt b/api-docs/_sources/binaryninja.builtins.basestring.txt new file mode 100644 index 0000000..39a4b89 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.basestring.txt @@ -0,0 +1,16 @@ +binaryninja.builtins.basestring +=============================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: basestring + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.bool.txt b/api-docs/_sources/binaryninja.builtins.bool.txt new file mode 100644 index 0000000..fbd2a58 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.bool.txt @@ -0,0 +1,32 @@ +binaryninja.builtins.bool +========================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: bool + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~bool.bit_length + ~bool.conjugate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~bool.denominator + ~bool.imag + ~bool.numerator + ~bool.real + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.buffer.txt b/api-docs/_sources/binaryninja.builtins.buffer.txt new file mode 100644 index 0000000..0ca95cf --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.buffer.txt @@ -0,0 +1,16 @@ +binaryninja.builtins.buffer +=========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: buffer + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.bytearray.txt b/api-docs/_sources/binaryninja.builtins.bytearray.txt new file mode 100644 index 0000000..81d0dd6 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.bytearray.txt @@ -0,0 +1,64 @@ +binaryninja.builtins.bytearray +============================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: bytearray + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~bytearray.append + ~bytearray.capitalize + ~bytearray.center + ~bytearray.count + ~bytearray.decode + ~bytearray.endswith + ~bytearray.expandtabs + ~bytearray.extend + ~bytearray.find + ~bytearray.fromhex + ~bytearray.index + ~bytearray.insert + ~bytearray.isalnum + ~bytearray.isalpha + ~bytearray.isdigit + ~bytearray.islower + ~bytearray.isspace + ~bytearray.istitle + ~bytearray.isupper + ~bytearray.join + ~bytearray.ljust + ~bytearray.lower + ~bytearray.lstrip + ~bytearray.partition + ~bytearray.pop + ~bytearray.remove + ~bytearray.replace + ~bytearray.reverse + ~bytearray.rfind + ~bytearray.rindex + ~bytearray.rjust + ~bytearray.rpartition + ~bytearray.rsplit + ~bytearray.rstrip + ~bytearray.split + ~bytearray.splitlines + ~bytearray.startswith + ~bytearray.strip + ~bytearray.swapcase + ~bytearray.title + ~bytearray.translate + ~bytearray.upper + ~bytearray.zfill + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.bytes.txt b/api-docs/_sources/binaryninja.builtins.bytes.txt new file mode 100644 index 0000000..8a065d2 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.bytes.txt @@ -0,0 +1,67 @@ +binaryninja.builtins.bytes +========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: bytes + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~bytes.capitalize + ~bytes.center + ~bytes.count + ~bytes.decode + ~bytes.encode + ~bytes.endswith + ~bytes.expandtabs + ~bytes.find + ~bytes.format + ~bytes.fromhex + ~bytes.index + ~bytes.isalnum + ~bytes.isalpha + ~bytes.isdigit + ~bytes.islower + ~bytes.isspace + ~bytes.istitle + ~bytes.isupper + ~bytes.join + ~bytes.ljust + ~bytes.lower + ~bytes.lstrip + ~bytes.maketrans + ~bytes.partition + ~bytes.replace + ~bytes.rfind + ~bytes.rindex + ~bytes.rjust + ~bytes.rpartition + ~bytes.rsplit + ~bytes.rstrip + ~bytes.split + ~bytes.splitlines + ~bytes.startswith + ~bytes.strip + ~bytes.swapcase + ~bytes.title + ~bytes.translate + ~bytes.upper + ~bytes.zfill + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~bytes.unorderable_err + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.classmethod.txt b/api-docs/_sources/binaryninja.builtins.classmethod.txt new file mode 100644 index 0000000..75ec120 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.classmethod.txt @@ -0,0 +1,16 @@ +binaryninja.builtins.classmethod +================================ + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: classmethod + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.complex.txt b/api-docs/_sources/binaryninja.builtins.complex.txt new file mode 100644 index 0000000..24d2452 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.complex.txt @@ -0,0 +1,29 @@ +binaryninja.builtins.complex +============================ + +.. currentmodule:: binaryninja.builtins + +.. 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/api-docs/_sources/binaryninja.builtins.dict.txt b/api-docs/_sources/binaryninja.builtins.dict.txt new file mode 100644 index 0000000..32a62f2 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.dict.txt @@ -0,0 +1,39 @@ +binaryninja.builtins.dict +========================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: dict + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~dict.clear + ~dict.copy + ~dict.fromkeys + ~dict.get + ~dict.has_key + ~dict.items + ~dict.iteritems + ~dict.iterkeys + ~dict.itervalues + ~dict.keys + ~dict.pop + ~dict.popitem + ~dict.setdefault + ~dict.update + ~dict.values + ~dict.viewitems + ~dict.viewkeys + ~dict.viewvalues + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.enumerate.txt b/api-docs/_sources/binaryninja.builtins.enumerate.txt new file mode 100644 index 0000000..16105ec --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.enumerate.txt @@ -0,0 +1,22 @@ +binaryninja.builtins.enumerate +============================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: enumerate + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~enumerate.next + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.file.txt b/api-docs/_sources/binaryninja.builtins.file.txt new file mode 100644 index 0000000..46ffeb4 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.file.txt @@ -0,0 +1,48 @@ +binaryninja.builtins.file +========================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: file + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~file.close + ~file.fileno + ~file.flush + ~file.isatty + ~file.read + ~file.readinto + ~file.readline + ~file.readlines + ~file.seek + ~file.tell + ~file.truncate + ~file.write + ~file.writelines + ~file.xreadlines + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~file.closed + ~file.encoding + ~file.errors + ~file.mode + ~file.name + ~file.newlines + ~file.next + ~file.softspace + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.filter.txt b/api-docs/_sources/binaryninja.builtins.filter.txt new file mode 100644 index 0000000..1f570a9 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.filter.txt @@ -0,0 +1,22 @@ +binaryninja.builtins.filter +=========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: filter + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~filter.next + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.float.txt b/api-docs/_sources/binaryninja.builtins.float.txt new file mode 100644 index 0000000..66e324f --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.float.txt @@ -0,0 +1,33 @@ +binaryninja.builtins.float +========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: float + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~float.as_integer_ratio + ~float.conjugate + ~float.fromhex + ~float.hex + ~float.is_integer + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~float.imag + ~float.real + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.frozenset.txt b/api-docs/_sources/binaryninja.builtins.frozenset.txt new file mode 100644 index 0000000..488fb05 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.frozenset.txt @@ -0,0 +1,29 @@ +binaryninja.builtins.frozenset +============================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: frozenset + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~frozenset.copy + ~frozenset.difference + ~frozenset.intersection + ~frozenset.isdisjoint + ~frozenset.issubset + ~frozenset.issuperset + ~frozenset.symmetric_difference + ~frozenset.union + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.int.txt b/api-docs/_sources/binaryninja.builtins.int.txt new file mode 100644 index 0000000..1af5ff8 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.int.txt @@ -0,0 +1,34 @@ +binaryninja.builtins.int +======================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: int + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~int.bit_length + ~int.conjugate + ~int.from_bytes + ~int.to_bytes + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~int.denominator + ~int.imag + ~int.numerator + ~int.real + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.list.txt b/api-docs/_sources/binaryninja.builtins.list.txt new file mode 100644 index 0000000..2434c3d --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.list.txt @@ -0,0 +1,32 @@ +binaryninja.builtins.list +========================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: list + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~list.append + ~list.clear + ~list.copy + ~list.count + ~list.extend + ~list.index + ~list.insert + ~list.pop + ~list.remove + ~list.reverse + ~list.sort + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.long.txt b/api-docs/_sources/binaryninja.builtins.long.txt new file mode 100644 index 0000000..8cdae7d --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.long.txt @@ -0,0 +1,32 @@ +binaryninja.builtins.long +========================= + +.. currentmodule:: binaryninja.builtins + +.. 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/api-docs/_sources/binaryninja.builtins.map.txt b/api-docs/_sources/binaryninja.builtins.map.txt new file mode 100644 index 0000000..5b25240 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.map.txt @@ -0,0 +1,22 @@ +binaryninja.builtins.map +======================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: map + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~map.next + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.memoryview.txt b/api-docs/_sources/binaryninja.builtins.memoryview.txt new file mode 100644 index 0000000..1f02099 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.memoryview.txt @@ -0,0 +1,35 @@ +binaryninja.builtins.memoryview +=============================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: memoryview + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~memoryview.tobytes + ~memoryview.tolist + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~memoryview.format + ~memoryview.itemsize + ~memoryview.ndim + ~memoryview.readonly + ~memoryview.shape + ~memoryview.strides + ~memoryview.suboffsets + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.next.txt b/api-docs/_sources/binaryninja.builtins.next.txt new file mode 100644 index 0000000..3369e73 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.next.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.next +========================= + +.. currentmodule:: binaryninja.builtins + +.. autofunction:: next \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.object.txt b/api-docs/_sources/binaryninja.builtins.object.txt new file mode 100644 index 0000000..c06b4b1 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.object.txt @@ -0,0 +1,22 @@ +binaryninja.builtins.object +=========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: object + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~object.next + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.pow.txt b/api-docs/_sources/binaryninja.builtins.pow.txt new file mode 100644 index 0000000..6b2a9bc --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.pow.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.pow +======================== + +.. currentmodule:: binaryninja.builtins + +.. autofunction:: pow \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.property.txt b/api-docs/_sources/binaryninja.builtins.property.txt new file mode 100644 index 0000000..2d89698 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.property.txt @@ -0,0 +1,32 @@ +binaryninja.builtins.property +============================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: property + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~property.deleter + ~property.getter + ~property.setter + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~property.fdel + ~property.fget + ~property.fset + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.range.txt b/api-docs/_sources/binaryninja.builtins.range.txt new file mode 100644 index 0000000..01a199a --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.range.txt @@ -0,0 +1,32 @@ +binaryninja.builtins.range +========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: range + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~range.__init__ + ~range.count + ~range.index + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~range.start + ~range.step + ~range.stop + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.reversed.txt b/api-docs/_sources/binaryninja.builtins.reversed.txt new file mode 100644 index 0000000..a1c89be --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.reversed.txt @@ -0,0 +1,22 @@ +binaryninja.builtins.reversed +============================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: reversed + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~reversed.next + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.round.txt b/api-docs/_sources/binaryninja.builtins.round.txt new file mode 100644 index 0000000..0847709 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.round.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.round +========================== + +.. currentmodule:: binaryninja.builtins + +.. autofunction:: round \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.set.txt b/api-docs/_sources/binaryninja.builtins.set.txt new file mode 100644 index 0000000..832f4d2 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.set.txt @@ -0,0 +1,38 @@ +binaryninja.builtins.set +======================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: set + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~set.add + ~set.clear + ~set.copy + ~set.difference + ~set.difference_update + ~set.discard + ~set.intersection + ~set.intersection_update + ~set.isdisjoint + ~set.issubset + ~set.issuperset + ~set.pop + ~set.remove + ~set.symmetric_difference + ~set.symmetric_difference_update + ~set.union + ~set.update + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.slice.txt b/api-docs/_sources/binaryninja.builtins.slice.txt new file mode 100644 index 0000000..10c9ac8 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.slice.txt @@ -0,0 +1,30 @@ +binaryninja.builtins.slice +========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: slice + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~slice.indices + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~slice.start + ~slice.step + ~slice.stop + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.staticmethod.txt b/api-docs/_sources/binaryninja.builtins.staticmethod.txt new file mode 100644 index 0000000..fcc8407 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.staticmethod.txt @@ -0,0 +1,16 @@ +binaryninja.builtins.staticmethod +================================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: staticmethod + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.str.txt b/api-docs/_sources/binaryninja.builtins.str.txt new file mode 100644 index 0000000..cf42deb --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.str.txt @@ -0,0 +1,72 @@ +binaryninja.builtins.str +======================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: str + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~str.capitalize + ~str.center + ~str.count + ~str.decode + ~str.encode + ~str.endswith + ~str.expandtabs + ~str.find + ~str.format + ~str.format_map + ~str.index + ~str.isalnum + ~str.isalpha + ~str.isdecimal + ~str.isdigit + ~str.isidentifier + ~str.islower + ~str.isnumeric + ~str.isprintable + ~str.isspace + ~str.istitle + ~str.isupper + ~str.join + ~str.ljust + ~str.lower + ~str.lstrip + ~str.maketrans + ~str.partition + ~str.replace + ~str.rfind + ~str.rindex + ~str.rjust + ~str.rpartition + ~str.rsplit + ~str.rstrip + ~str.split + ~str.splitlines + ~str.startswith + ~str.strip + ~str.swapcase + ~str.title + ~str.translate + ~str.upper + ~str.zfill + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~str.no_convert_msg + ~str.unorderable_err + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.super.txt b/api-docs/_sources/binaryninja.builtins.super.txt new file mode 100644 index 0000000..73ed1cb --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.super.txt @@ -0,0 +1,6 @@ +binaryninja.builtins.super +========================== + +.. currentmodule:: binaryninja.builtins + +.. autofunction:: super \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.tuple.txt b/api-docs/_sources/binaryninja.builtins.tuple.txt new file mode 100644 index 0000000..4c32b40 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.tuple.txt @@ -0,0 +1,23 @@ +binaryninja.builtins.tuple +========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: tuple + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~tuple.count + ~tuple.index + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.type.txt b/api-docs/_sources/binaryninja.builtins.type.txt new file mode 100644 index 0000000..c200322 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.type.txt @@ -0,0 +1,22 @@ +binaryninja.builtins.type +========================= + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: type + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~type.mro + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.unicode.txt b/api-docs/_sources/binaryninja.builtins.unicode.txt new file mode 100644 index 0000000..5245cf1 --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.unicode.txt @@ -0,0 +1,61 @@ +binaryninja.builtins.unicode +============================ + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: unicode + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~unicode.capitalize + ~unicode.center + ~unicode.count + ~unicode.decode + ~unicode.encode + ~unicode.endswith + ~unicode.expandtabs + ~unicode.find + ~unicode.format + ~unicode.index + ~unicode.isalnum + ~unicode.isalpha + ~unicode.isdecimal + ~unicode.isdigit + ~unicode.islower + ~unicode.isnumeric + ~unicode.isspace + ~unicode.istitle + ~unicode.isupper + ~unicode.join + ~unicode.ljust + ~unicode.lower + ~unicode.lstrip + ~unicode.partition + ~unicode.replace + ~unicode.rfind + ~unicode.rindex + ~unicode.rjust + ~unicode.rpartition + ~unicode.rsplit + ~unicode.rstrip + ~unicode.split + ~unicode.splitlines + ~unicode.startswith + ~unicode.strip + ~unicode.swapcase + ~unicode.title + ~unicode.translate + ~unicode.upper + ~unicode.zfill + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.xrange.txt b/api-docs/_sources/binaryninja.builtins.xrange.txt new file mode 100644 index 0000000..bb5a75a --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.xrange.txt @@ -0,0 +1,16 @@ +binaryninja.builtins.xrange +=========================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: xrange + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.builtins.zip.txt b/api-docs/_sources/binaryninja.builtins.zip.txt new file mode 100644 index 0000000..81d6ceb --- /dev/null +++ b/api-docs/_sources/binaryninja.builtins.zip.txt @@ -0,0 +1,22 @@ +binaryninja.builtins.zip +======================== + +.. currentmodule:: binaryninja.builtins + +.. autoclass:: zip + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~zip.next + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.callingconvention-module.txt b/api-docs/_sources/binaryninja.callingconvention-module.txt new file mode 100644 index 0000000..dbaeaa2 --- /dev/null +++ b/api-docs/_sources/binaryninja.callingconvention-module.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/api-docs/_sources/binaryninja.callingconvention.CallingConvention.txt b/api-docs/_sources/binaryninja.callingconvention.CallingConvention.txt new file mode 100644 index 0000000..9e68d33 --- /dev/null +++ b/api-docs/_sources/binaryninja.callingconvention.CallingConvention.txt @@ -0,0 +1,48 @@ +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.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/api-docs/_sources/binaryninja.callingconvention.range.txt b/api-docs/_sources/binaryninja.callingconvention.range.txt new file mode 100644 index 0000000..c63c1b8 --- /dev/null +++ b/api-docs/_sources/binaryninja.callingconvention.range.txt @@ -0,0 +1,6 @@ +binaryninja.callingconvention.range +=================================== + +.. currentmodule:: binaryninja.callingconvention + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.databuffer-module.txt b/api-docs/_sources/binaryninja.databuffer-module.txt new file mode 100644 index 0000000..ea40237 --- /dev/null +++ b/api-docs/_sources/binaryninja.databuffer-module.txt @@ -0,0 +1,19 @@ +databuffer module +===================== + +.. autosummary:: + :toctree: + + binaryninja.databuffer.DataBuffer + 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/api-docs/_sources/binaryninja.databuffer.DataBuffer.txt b/api-docs/_sources/binaryninja.databuffer.DataBuffer.txt new file mode 100644 index 0000000..431b94b --- /dev/null +++ b/api-docs/_sources/binaryninja.databuffer.DataBuffer.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/api-docs/_sources/binaryninja.databuffer.escape_string.txt b/api-docs/_sources/binaryninja.databuffer.escape_string.txt new file mode 100644 index 0000000..7115807 --- /dev/null +++ b/api-docs/_sources/binaryninja.databuffer.escape_string.txt @@ -0,0 +1,6 @@ +binaryninja.databuffer.escape_string +==================================== + +.. currentmodule:: binaryninja.databuffer + +.. autofunction:: escape_string \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.databuffer.pyNativeStr.txt b/api-docs/_sources/binaryninja.databuffer.pyNativeStr.txt new file mode 100644 index 0000000..6edfb22 --- /dev/null +++ b/api-docs/_sources/binaryninja.databuffer.pyNativeStr.txt @@ -0,0 +1,6 @@ +binaryninja.databuffer.pyNativeStr +================================== + +.. currentmodule:: binaryninja.databuffer + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.databuffer.unescape_string.txt b/api-docs/_sources/binaryninja.databuffer.unescape_string.txt new file mode 100644 index 0000000..e9a6ab7 --- /dev/null +++ b/api-docs/_sources/binaryninja.databuffer.unescape_string.txt @@ -0,0 +1,6 @@ +binaryninja.databuffer.unescape_string +====================================== + +.. currentmodule:: binaryninja.databuffer + +.. autofunction:: unescape_string \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.demangle-module.txt b/api-docs/_sources/binaryninja.demangle-module.txt new file mode 100644 index 0000000..b5ffa05 --- /dev/null +++ b/api-docs/_sources/binaryninja.demangle-module.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/api-docs/_sources/binaryninja.demangle.demangle_gnu3.txt b/api-docs/_sources/binaryninja.demangle.demangle_gnu3.txt new file mode 100644 index 0000000..c115b9a --- /dev/null +++ b/api-docs/_sources/binaryninja.demangle.demangle_gnu3.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.demangle_gnu3 +================================== + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: demangle_gnu3 \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.demangle.demangle_ms.txt b/api-docs/_sources/binaryninja.demangle.demangle_ms.txt new file mode 100644 index 0000000..63a9697 --- /dev/null +++ b/api-docs/_sources/binaryninja.demangle.demangle_ms.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.demangle_ms +================================ + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: demangle_ms \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.demangle.get_qualified_name.txt b/api-docs/_sources/binaryninja.demangle.get_qualified_name.txt new file mode 100644 index 0000000..8e0d535 --- /dev/null +++ b/api-docs/_sources/binaryninja.demangle.get_qualified_name.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/api-docs/_sources/binaryninja.demangle.pyNativeStr.txt b/api-docs/_sources/binaryninja.demangle.pyNativeStr.txt new file mode 100644 index 0000000..0c603fa --- /dev/null +++ b/api-docs/_sources/binaryninja.demangle.pyNativeStr.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.pyNativeStr +================================ + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.demangle.range.txt b/api-docs/_sources/binaryninja.demangle.range.txt new file mode 100644 index 0000000..69f9c7c --- /dev/null +++ b/api-docs/_sources/binaryninja.demangle.range.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.range +========================== + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.downloadprovider-module.txt b/api-docs/_sources/binaryninja.downloadprovider-module.txt new file mode 100644 index 0000000..023b637 --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider-module.txt @@ -0,0 +1,22 @@ +downloadprovider module +===================== + +.. autosummary:: + :toctree: + + binaryninja.downloadprovider.DownloadInstance + binaryninja.downloadprovider.DownloadProvider + binaryninja.downloadprovider.PythonDownloadInstance + binaryninja.downloadprovider.PythonDownloadProvider + binaryninja.downloadprovider.Setting + binaryninja.downloadprovider.pyNativeStr + binaryninja.downloadprovider.with_metaclass + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.downloadprovider + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.downloadprovider.DownloadInstance.txt b/api-docs/_sources/binaryninja.downloadprovider.DownloadInstance.txt new file mode 100644 index 0000000..9194a08 --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider.DownloadInstance.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/api-docs/_sources/binaryninja.downloadprovider.DownloadProvider.txt b/api-docs/_sources/binaryninja.downloadprovider.DownloadProvider.txt new file mode 100644 index 0000000..1c9e283 --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider.DownloadProvider.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/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadInstance.txt b/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadInstance.txt new file mode 100644 index 0000000..145369a --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadInstance.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/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadProvider.txt b/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadProvider.txt new file mode 100644 index 0000000..70fb1ef --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadProvider.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/api-docs/_sources/binaryninja.downloadprovider.Setting.txt b/api-docs/_sources/binaryninja.downloadprovider.Setting.txt new file mode 100644 index 0000000..64e73ea --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider.Setting.txt @@ -0,0 +1,44 @@ +binaryninja.downloadprovider.Setting +==================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autoclass:: Setting + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Setting.__init__ + ~Setting.get_bool + ~Setting.get_double + ~Setting.get_integer + ~Setting.get_integer_list + ~Setting.get_string + ~Setting.get_string_list + ~Setting.is_bool + ~Setting.is_double + ~Setting.is_integer + ~Setting.is_integer_list + ~Setting.is_present + ~Setting.is_string + ~Setting.is_string_list + ~Setting.remove_setting + ~Setting.remove_setting_group + ~Setting.set + ~Setting.set_bool + ~Setting.set_double + ~Setting.set_integer + ~Setting.set_integer_list + ~Setting.set_string + ~Setting.set_string_list + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.downloadprovider.pyNativeStr.txt b/api-docs/_sources/binaryninja.downloadprovider.pyNativeStr.txt new file mode 100644 index 0000000..65766b5 --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider.pyNativeStr.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.pyNativeStr +======================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.downloadprovider.with_metaclass.txt b/api-docs/_sources/binaryninja.downloadprovider.with_metaclass.txt new file mode 100644 index 0000000..920c75d --- /dev/null +++ b/api-docs/_sources/binaryninja.downloadprovider.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.with_metaclass +=========================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums-module.txt b/api-docs/_sources/binaryninja.enums-module.txt new file mode 100644 index 0000000..24e181a --- /dev/null +++ b/api-docs/_sources/binaryninja.enums-module.txt @@ -0,0 +1,67 @@ +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.ScriptingProviderExecuteResult + binaryninja.enums.ScriptingProviderInputReadyState + binaryninja.enums.SectionSemantics + binaryninja.enums.SegmentFlag + binaryninja.enums.StringType + binaryninja.enums.StructureType + 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/api-docs/_sources/binaryninja.enums.ActionType.txt b/api-docs/_sources/binaryninja.enums.ActionType.txt new file mode 100644 index 0000000..244c281 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.ActionType.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/api-docs/_sources/binaryninja.enums.AnalysisSkipReason.txt b/api-docs/_sources/binaryninja.enums.AnalysisSkipReason.txt new file mode 100644 index 0000000..c2bdbc9 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.AnalysisSkipReason.txt @@ -0,0 +1,25 @@ +binaryninja.enums.AnalysisSkipReason +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: AnalysisSkipReason + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~AnalysisSkipReason.AlwaysSkipReason + ~AnalysisSkipReason.ExceedFunctionAnalysisTimeSkipReason + ~AnalysisSkipReason.ExceedFunctionSizeSkipReason + ~AnalysisSkipReason.NoSkipReason + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.AnalysisState.txt b/api-docs/_sources/binaryninja.enums.AnalysisState.txt new file mode 100644 index 0000000..8027fd4 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.AnalysisState.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/api-docs/_sources/binaryninja.enums.BranchType.txt b/api-docs/_sources/binaryninja.enums.BranchType.txt new file mode 100644 index 0000000..00e659f --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.BranchType.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/api-docs/_sources/binaryninja.enums.CallingConventionName.txt b/api-docs/_sources/binaryninja.enums.CallingConventionName.txt new file mode 100644 index 0000000..1024dc4 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.CallingConventionName.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/api-docs/_sources/binaryninja.enums.DisassemblyOption.txt b/api-docs/_sources/binaryninja.enums.DisassemblyOption.txt new file mode 100644 index 0000000..7b57514 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.DisassemblyOption.txt @@ -0,0 +1,30 @@ +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.ShowVariableTypesWhenAssigned + ~DisassemblyOption.ShowVariablesAtTopOfGraph + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.Endianness.txt b/api-docs/_sources/binaryninja.enums.Endianness.txt new file mode 100644 index 0000000..e36a4c4 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.Endianness.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/api-docs/_sources/binaryninja.enums.FindFlag.txt b/api-docs/_sources/binaryninja.enums.FindFlag.txt new file mode 100644 index 0000000..33b3005 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.FindFlag.txt @@ -0,0 +1,23 @@ +binaryninja.enums.FindFlag +========================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: FindFlag + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FindFlag.FindCaseInsensitive + ~FindFlag.NoFindFlags + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.FlagRole.txt b/api-docs/_sources/binaryninja.enums.FlagRole.txt new file mode 100644 index 0000000..723c8ff --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.FlagRole.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/api-docs/_sources/binaryninja.enums.FormInputFieldType.txt b/api-docs/_sources/binaryninja.enums.FormInputFieldType.txt new file mode 100644 index 0000000..954751b --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.FormInputFieldType.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/api-docs/_sources/binaryninja.enums.FunctionAnalysisSkipOverride.txt b/api-docs/_sources/binaryninja.enums.FunctionAnalysisSkipOverride.txt new file mode 100644 index 0000000..01ef400 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.FunctionAnalysisSkipOverride.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/api-docs/_sources/binaryninja.enums.FunctionGraphType.txt b/api-docs/_sources/binaryninja.enums.FunctionGraphType.txt new file mode 100644 index 0000000..f93d953 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.FunctionGraphType.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/api-docs/_sources/binaryninja.enums.HighlightColorStyle.txt b/api-docs/_sources/binaryninja.enums.HighlightColorStyle.txt new file mode 100644 index 0000000..0ae9282 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.HighlightColorStyle.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/api-docs/_sources/binaryninja.enums.HighlightStandardColor.txt b/api-docs/_sources/binaryninja.enums.HighlightStandardColor.txt new file mode 100644 index 0000000..2592d1a --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.HighlightStandardColor.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/api-docs/_sources/binaryninja.enums.ILBranchDependence.txt b/api-docs/_sources/binaryninja.enums.ILBranchDependence.txt new file mode 100644 index 0000000..ae26f25 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.ILBranchDependence.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/api-docs/_sources/binaryninja.enums.ImplicitRegisterExtend.txt b/api-docs/_sources/binaryninja.enums.ImplicitRegisterExtend.txt new file mode 100644 index 0000000..94283f5 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.ImplicitRegisterExtend.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/api-docs/_sources/binaryninja.enums.InstructionTextTokenContext.txt b/api-docs/_sources/binaryninja.enums.InstructionTextTokenContext.txt new file mode 100644 index 0000000..fc3c413 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.InstructionTextTokenContext.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/api-docs/_sources/binaryninja.enums.InstructionTextTokenType.txt b/api-docs/_sources/binaryninja.enums.InstructionTextTokenType.txt new file mode 100644 index 0000000..f947d63 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.InstructionTextTokenType.txt @@ -0,0 +1,49 @@ +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.FieldNameToken + ~InstructionTextTokenType.FloatingPointToken + ~InstructionTextTokenType.HexDumpByteValueToken + ~InstructionTextTokenType.HexDumpInvalidByteToken + ~InstructionTextTokenType.HexDumpSkippedByteToken + ~InstructionTextTokenType.HexDumpTextToken + ~InstructionTextTokenType.ImportToken + ~InstructionTextTokenType.IndirectImportToken + ~InstructionTextTokenType.InstructionToken + ~InstructionTextTokenType.IntegerToken + ~InstructionTextTokenType.KeywordToken + ~InstructionTextTokenType.LocalVariableToken + ~InstructionTextTokenType.OpcodeToken + ~InstructionTextTokenType.OperandSeparatorToken + ~InstructionTextTokenType.PossibleAddressToken + ~InstructionTextTokenType.RegisterToken + ~InstructionTextTokenType.StringToken + ~InstructionTextTokenType.TextToken + ~InstructionTextTokenType.TypeNameToken + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.IntegerDisplayType.txt b/api-docs/_sources/binaryninja.enums.IntegerDisplayType.txt new file mode 100644 index 0000000..ce2e9eb --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.IntegerDisplayType.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/api-docs/_sources/binaryninja.enums.LinearDisassemblyLineType.txt b/api-docs/_sources/binaryninja.enums.LinearDisassemblyLineType.txt new file mode 100644 index 0000000..9d254e9 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.LinearDisassemblyLineType.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/api-docs/_sources/binaryninja.enums.LogLevel.txt b/api-docs/_sources/binaryninja.enums.LogLevel.txt new file mode 100644 index 0000000..7f86895 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.LogLevel.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/api-docs/_sources/binaryninja.enums.LowLevelILFlagCondition.txt b/api-docs/_sources/binaryninja.enums.LowLevelILFlagCondition.txt new file mode 100644 index 0000000..9836066 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.LowLevelILFlagCondition.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/api-docs/_sources/binaryninja.enums.LowLevelILOperation.txt b/api-docs/_sources/binaryninja.enums.LowLevelILOperation.txt new file mode 100644 index 0000000..d2ca41b --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.LowLevelILOperation.txt @@ -0,0 +1,155 @@ +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_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/api-docs/_sources/binaryninja.enums.MediumLevelILOperation.txt b/api-docs/_sources/binaryninja.enums.MediumLevelILOperation.txt new file mode 100644 index 0000000..5edbc33 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.MediumLevelILOperation.txt @@ -0,0 +1,150 @@ +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_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_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/api-docs/_sources/binaryninja.enums.MemberAccess.txt b/api-docs/_sources/binaryninja.enums.MemberAccess.txt new file mode 100644 index 0000000..793f4bf --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.MemberAccess.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/api-docs/_sources/binaryninja.enums.MemberScope.txt b/api-docs/_sources/binaryninja.enums.MemberScope.txt new file mode 100644 index 0000000..332bf7b --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.MemberScope.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/api-docs/_sources/binaryninja.enums.MessageBoxButtonResult.txt b/api-docs/_sources/binaryninja.enums.MessageBoxButtonResult.txt new file mode 100644 index 0000000..3f061ad --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.MessageBoxButtonResult.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/api-docs/_sources/binaryninja.enums.MessageBoxButtonSet.txt b/api-docs/_sources/binaryninja.enums.MessageBoxButtonSet.txt new file mode 100644 index 0000000..11b4fab --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.MessageBoxButtonSet.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/api-docs/_sources/binaryninja.enums.MessageBoxIcon.txt b/api-docs/_sources/binaryninja.enums.MessageBoxIcon.txt new file mode 100644 index 0000000..42bed20 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.MessageBoxIcon.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/api-docs/_sources/binaryninja.enums.MetadataType.txt b/api-docs/_sources/binaryninja.enums.MetadataType.txt new file mode 100644 index 0000000..57539a3 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.MetadataType.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/api-docs/_sources/binaryninja.enums.ModificationStatus.txt b/api-docs/_sources/binaryninja.enums.ModificationStatus.txt new file mode 100644 index 0000000..9e44698 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.ModificationStatus.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/api-docs/_sources/binaryninja.enums.NameType.txt b/api-docs/_sources/binaryninja.enums.NameType.txt new file mode 100644 index 0000000..26b3435 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.NameType.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/api-docs/_sources/binaryninja.enums.NamedTypeReferenceClass.txt b/api-docs/_sources/binaryninja.enums.NamedTypeReferenceClass.txt new file mode 100644 index 0000000..be0263f --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.NamedTypeReferenceClass.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/api-docs/_sources/binaryninja.enums.PluginCommandType.txt b/api-docs/_sources/binaryninja.enums.PluginCommandType.txt new file mode 100644 index 0000000..c982bc3 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.PluginCommandType.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/api-docs/_sources/binaryninja.enums.PluginLoadOrder.txt b/api-docs/_sources/binaryninja.enums.PluginLoadOrder.txt new file mode 100644 index 0000000..5bc1974 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.PluginLoadOrder.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/api-docs/_sources/binaryninja.enums.PluginOrigin.txt b/api-docs/_sources/binaryninja.enums.PluginOrigin.txt new file mode 100644 index 0000000..a92ce70 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.PluginOrigin.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/api-docs/_sources/binaryninja.enums.PluginType.txt b/api-docs/_sources/binaryninja.enums.PluginType.txt new file mode 100644 index 0000000..1c69f7a --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.PluginType.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/api-docs/_sources/binaryninja.enums.PluginUpdateStatus.txt b/api-docs/_sources/binaryninja.enums.PluginUpdateStatus.txt new file mode 100644 index 0000000..e0efb16 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.PluginUpdateStatus.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/api-docs/_sources/binaryninja.enums.PointerSuffix.txt b/api-docs/_sources/binaryninja.enums.PointerSuffix.txt new file mode 100644 index 0000000..211f0ef --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.PointerSuffix.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/api-docs/_sources/binaryninja.enums.ReferenceType.txt b/api-docs/_sources/binaryninja.enums.ReferenceType.txt new file mode 100644 index 0000000..20a7783 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.ReferenceType.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/api-docs/_sources/binaryninja.enums.RegisterValueType.txt b/api-docs/_sources/binaryninja.enums.RegisterValueType.txt new file mode 100644 index 0000000..293c29c --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.RegisterValueType.txt @@ -0,0 +1,33 @@ +binaryninja.enums.RegisterValueType +=================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: RegisterValueType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~RegisterValueType.ConstantPointerValue + ~RegisterValueType.ConstantValue + ~RegisterValueType.EntryValue + ~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/api-docs/_sources/binaryninja.enums.ScriptingProviderExecuteResult.txt b/api-docs/_sources/binaryninja.enums.ScriptingProviderExecuteResult.txt new file mode 100644 index 0000000..6590c6c --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.ScriptingProviderExecuteResult.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/api-docs/_sources/binaryninja.enums.ScriptingProviderInputReadyState.txt b/api-docs/_sources/binaryninja.enums.ScriptingProviderInputReadyState.txt new file mode 100644 index 0000000..fd59345 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.ScriptingProviderInputReadyState.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/api-docs/_sources/binaryninja.enums.SectionSemantics.txt b/api-docs/_sources/binaryninja.enums.SectionSemantics.txt new file mode 100644 index 0000000..f4f6d11 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.SectionSemantics.txt @@ -0,0 +1,25 @@ +binaryninja.enums.SectionSemantics +================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: SectionSemantics + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~SectionSemantics.DefaultSectionSemantics + ~SectionSemantics.ReadOnlyCodeSectionSemantics + ~SectionSemantics.ReadOnlyDataSectionSemantics + ~SectionSemantics.ReadWriteDataSectionSemantics + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.SegmentFlag.txt b/api-docs/_sources/binaryninja.enums.SegmentFlag.txt new file mode 100644 index 0000000..9ed8499 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.SegmentFlag.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/api-docs/_sources/binaryninja.enums.StringType.txt b/api-docs/_sources/binaryninja.enums.StringType.txt new file mode 100644 index 0000000..3523834 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.StringType.txt @@ -0,0 +1,24 @@ +binaryninja.enums.StringType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: StringType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~StringType.AsciiString + ~StringType.Utf16String + ~StringType.Utf32String + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.StructureType.txt b/api-docs/_sources/binaryninja.enums.StructureType.txt new file mode 100644 index 0000000..570357d --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.StructureType.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/api-docs/_sources/binaryninja.enums.SymbolType.txt b/api-docs/_sources/binaryninja.enums.SymbolType.txt new file mode 100644 index 0000000..ce8f0fb --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.SymbolType.txt @@ -0,0 +1,26 @@ +binaryninja.enums.SymbolType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: SymbolType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~SymbolType.DataSymbol + ~SymbolType.FunctionSymbol + ~SymbolType.ImportAddressSymbol + ~SymbolType.ImportedDataSymbol + ~SymbolType.ImportedFunctionSymbol + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.TransformType.txt b/api-docs/_sources/binaryninja.enums.TransformType.txt new file mode 100644 index 0000000..227fb65 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.TransformType.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/api-docs/_sources/binaryninja.enums.TypeClass.txt b/api-docs/_sources/binaryninja.enums.TypeClass.txt new file mode 100644 index 0000000..cd98f34 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.TypeClass.txt @@ -0,0 +1,33 @@ +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 + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.enums.UpdateResult.txt b/api-docs/_sources/binaryninja.enums.UpdateResult.txt new file mode 100644 index 0000000..b0d7c6e --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.UpdateResult.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/api-docs/_sources/binaryninja.enums.VariableSourceType.txt b/api-docs/_sources/binaryninja.enums.VariableSourceType.txt new file mode 100644 index 0000000..5c18b15 --- /dev/null +++ b/api-docs/_sources/binaryninja.enums.VariableSourceType.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/api-docs/_sources/binaryninja.fileaccessor-module.txt b/api-docs/_sources/binaryninja.fileaccessor-module.txt new file mode 100644 index 0000000..4722729 --- /dev/null +++ b/api-docs/_sources/binaryninja.fileaccessor-module.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/api-docs/_sources/binaryninja.fileaccessor.CoreFileAccessor.txt b/api-docs/_sources/binaryninja.fileaccessor.CoreFileAccessor.txt new file mode 100644 index 0000000..1f72e5c --- /dev/null +++ b/api-docs/_sources/binaryninja.fileaccessor.CoreFileAccessor.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/api-docs/_sources/binaryninja.fileaccessor.FileAccessor.txt b/api-docs/_sources/binaryninja.fileaccessor.FileAccessor.txt new file mode 100644 index 0000000..39c23cd --- /dev/null +++ b/api-docs/_sources/binaryninja.fileaccessor.FileAccessor.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/api-docs/_sources/binaryninja.filemetadata-module.txt b/api-docs/_sources/binaryninja.filemetadata-module.txt new file mode 100644 index 0000000..2fae456 --- /dev/null +++ b/api-docs/_sources/binaryninja.filemetadata-module.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/api-docs/_sources/binaryninja.filemetadata.FileMetadata.txt b/api-docs/_sources/binaryninja.filemetadata.FileMetadata.txt new file mode 100644 index 0000000..6773302 --- /dev/null +++ b/api-docs/_sources/binaryninja.filemetadata.FileMetadata.txt @@ -0,0 +1,48 @@ +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.raw + ~FileMetadata.saved + ~FileMetadata.session_data + ~FileMetadata.view + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.filemetadata.NavigationHandler.txt b/api-docs/_sources/binaryninja.filemetadata.NavigationHandler.txt new file mode 100644 index 0000000..52d799b --- /dev/null +++ b/api-docs/_sources/binaryninja.filemetadata.NavigationHandler.txt @@ -0,0 +1,16 @@ +binaryninja.filemetadata.NavigationHandler +========================================== + +.. currentmodule:: binaryninja.filemetadata + +.. autoclass:: NavigationHandler + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.function-module.txt b/api-docs/_sources/binaryninja.function-module.txt new file mode 100644 index 0000000..9e2a207 --- /dev/null +++ b/api-docs/_sources/binaryninja.function-module.txt @@ -0,0 +1,39 @@ +function module +===================== + +.. autosummary:: + :toctree: + + binaryninja.function.AdvancedFunctionAnalysisDataRequestor + binaryninja.function.ConstantReference + binaryninja.function.DisassemblySettings + binaryninja.function.DisassemblyTextLine + binaryninja.function.Function + binaryninja.function.FunctionGraph + binaryninja.function.FunctionGraphBlock + binaryninja.function.FunctionGraphEdge + 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/api-docs/_sources/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.txt b/api-docs/_sources/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.txt new file mode 100644 index 0000000..80165d2 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.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/api-docs/_sources/binaryninja.function.ConstantReference.txt b/api-docs/_sources/binaryninja.function.ConstantReference.txt new file mode 100644 index 0000000..8bd4a74 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.ConstantReference.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/api-docs/_sources/binaryninja.function.DisassemblySettings.txt b/api-docs/_sources/binaryninja.function.DisassemblySettings.txt new file mode 100644 index 0000000..acb2774 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.DisassemblySettings.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/api-docs/_sources/binaryninja.function.DisassemblyTextLine.txt b/api-docs/_sources/binaryninja.function.DisassemblyTextLine.txt new file mode 100644 index 0000000..7493fe1 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.DisassemblyTextLine.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/api-docs/_sources/binaryninja.function.Function.txt b/api-docs/_sources/binaryninja.function.Function.txt new file mode 100644 index 0000000..170e8e6 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.Function.txt @@ -0,0 +1,137 @@ +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.mark_recent_use + ~Function.reanalyze + ~Function.release_advanced_analysis_data + ~Function.request_advanced_analysis_data + ~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_basic_blocks + ~Function.llil_instructions + ~Function.low_level_il + ~Function.medium_level_il + ~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.vars + ~Function.view + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.function.FunctionGraph.txt b/api-docs/_sources/binaryninja.function.FunctionGraph.txt new file mode 100644 index 0000000..6594bab --- /dev/null +++ b/api-docs/_sources/binaryninja.function.FunctionGraph.txt @@ -0,0 +1,48 @@ +binaryninja.function.FunctionGraph +================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: FunctionGraph + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionGraph.__init__ + ~FunctionGraph.abort + ~FunctionGraph.get_blocks_in_region + ~FunctionGraph.is_option_set + ~FunctionGraph.layout + ~FunctionGraph.layout_and_wait + ~FunctionGraph.on_complete + ~FunctionGraph.set_option + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FunctionGraph.blocks + ~FunctionGraph.complete + ~FunctionGraph.function + ~FunctionGraph.has_blocks + ~FunctionGraph.height + ~FunctionGraph.horizontal_block_margin + ~FunctionGraph.il_function + ~FunctionGraph.is_il + ~FunctionGraph.is_low_level_il + ~FunctionGraph.is_medium_level_il + ~FunctionGraph.settings + ~FunctionGraph.type + ~FunctionGraph.vertical_block_margin + ~FunctionGraph.width + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.function.FunctionGraphBlock.txt b/api-docs/_sources/binaryninja.function.FunctionGraphBlock.txt new file mode 100644 index 0000000..5c1e899 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.FunctionGraphBlock.txt @@ -0,0 +1,37 @@ +binaryninja.function.FunctionGraphBlock +======================================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: FunctionGraphBlock + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionGraphBlock.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FunctionGraphBlock.arch + ~FunctionGraphBlock.basic_block + ~FunctionGraphBlock.end + ~FunctionGraphBlock.height + ~FunctionGraphBlock.lines + ~FunctionGraphBlock.outgoing_edges + ~FunctionGraphBlock.start + ~FunctionGraphBlock.width + ~FunctionGraphBlock.x + ~FunctionGraphBlock.y + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.function.FunctionGraphEdge.txt b/api-docs/_sources/binaryninja.function.FunctionGraphEdge.txt new file mode 100644 index 0000000..953ab7e --- /dev/null +++ b/api-docs/_sources/binaryninja.function.FunctionGraphEdge.txt @@ -0,0 +1,22 @@ +binaryninja.function.FunctionGraphEdge +====================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: FunctionGraphEdge + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionGraphEdge.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.function.IndirectBranchInfo.txt b/api-docs/_sources/binaryninja.function.IndirectBranchInfo.txt new file mode 100644 index 0000000..2214b5b --- /dev/null +++ b/api-docs/_sources/binaryninja.function.IndirectBranchInfo.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/api-docs/_sources/binaryninja.function.InstructionBranch.txt b/api-docs/_sources/binaryninja.function.InstructionBranch.txt new file mode 100644 index 0000000..81ddf79 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.InstructionBranch.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/api-docs/_sources/binaryninja.function.InstructionInfo.txt b/api-docs/_sources/binaryninja.function.InstructionInfo.txt new file mode 100644 index 0000000..e2b25cf --- /dev/null +++ b/api-docs/_sources/binaryninja.function.InstructionInfo.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/api-docs/_sources/binaryninja.function.InstructionTextToken.txt b/api-docs/_sources/binaryninja.function.InstructionTextToken.txt new file mode 100644 index 0000000..5591040 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.InstructionTextToken.txt @@ -0,0 +1,22 @@ +binaryninja.function.InstructionTextToken +========================================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: InstructionTextToken + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionTextToken.__init__ + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.function.IntrinsicInfo.txt b/api-docs/_sources/binaryninja.function.IntrinsicInfo.txt new file mode 100644 index 0000000..c218184 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.IntrinsicInfo.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/api-docs/_sources/binaryninja.function.IntrinsicInput.txt b/api-docs/_sources/binaryninja.function.IntrinsicInput.txt new file mode 100644 index 0000000..87aeddc --- /dev/null +++ b/api-docs/_sources/binaryninja.function.IntrinsicInput.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/api-docs/_sources/binaryninja.function.LookupTableEntry.txt b/api-docs/_sources/binaryninja.function.LookupTableEntry.txt new file mode 100644 index 0000000..3c4e7d6 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.LookupTableEntry.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/api-docs/_sources/binaryninja.function.ParameterVariables.txt b/api-docs/_sources/binaryninja.function.ParameterVariables.txt new file mode 100644 index 0000000..5c690ac --- /dev/null +++ b/api-docs/_sources/binaryninja.function.ParameterVariables.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/api-docs/_sources/binaryninja.function.PossibleValueSet.txt b/api-docs/_sources/binaryninja.function.PossibleValueSet.txt new file mode 100644 index 0000000..b25f4db --- /dev/null +++ b/api-docs/_sources/binaryninja.function.PossibleValueSet.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/api-docs/_sources/binaryninja.function.RegisterInfo.txt b/api-docs/_sources/binaryninja.function.RegisterInfo.txt new file mode 100644 index 0000000..82157e7 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.RegisterInfo.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/api-docs/_sources/binaryninja.function.RegisterStackInfo.txt b/api-docs/_sources/binaryninja.function.RegisterStackInfo.txt new file mode 100644 index 0000000..3e7736c --- /dev/null +++ b/api-docs/_sources/binaryninja.function.RegisterStackInfo.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/api-docs/_sources/binaryninja.function.RegisterValue.txt b/api-docs/_sources/binaryninja.function.RegisterValue.txt new file mode 100644 index 0000000..51f464c --- /dev/null +++ b/api-docs/_sources/binaryninja.function.RegisterValue.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/api-docs/_sources/binaryninja.function.StackVariableReference.txt b/api-docs/_sources/binaryninja.function.StackVariableReference.txt new file mode 100644 index 0000000..f77d894 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.StackVariableReference.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/api-docs/_sources/binaryninja.function.ValueRange.txt b/api-docs/_sources/binaryninja.function.ValueRange.txt new file mode 100644 index 0000000..fb2e41a --- /dev/null +++ b/api-docs/_sources/binaryninja.function.ValueRange.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/api-docs/_sources/binaryninja.function.Variable.txt b/api-docs/_sources/binaryninja.function.Variable.txt new file mode 100644 index 0000000..e0b18b4 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.Variable.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/api-docs/_sources/binaryninja.function.range.txt b/api-docs/_sources/binaryninja.function.range.txt new file mode 100644 index 0000000..a674543 --- /dev/null +++ b/api-docs/_sources/binaryninja.function.range.txt @@ -0,0 +1,6 @@ +binaryninja.function.range +========================== + +.. currentmodule:: binaryninja.function + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.functionrecognizer-module.txt b/api-docs/_sources/binaryninja.functionrecognizer-module.txt new file mode 100644 index 0000000..3d3c7ec --- /dev/null +++ b/api-docs/_sources/binaryninja.functionrecognizer-module.txt @@ -0,0 +1,16 @@ +functionrecognizer module +===================== + +.. autosummary:: + :toctree: + + binaryninja.functionrecognizer.FunctionRecognizer + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.functionrecognizer + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.functionrecognizer.FunctionRecognizer.txt b/api-docs/_sources/binaryninja.functionrecognizer.FunctionRecognizer.txt new file mode 100644 index 0000000..a5bd689 --- /dev/null +++ b/api-docs/_sources/binaryninja.functionrecognizer.FunctionRecognizer.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/api-docs/_sources/binaryninja.highlight-module.txt b/api-docs/_sources/binaryninja.highlight-module.txt new file mode 100644 index 0000000..7dfa198 --- /dev/null +++ b/api-docs/_sources/binaryninja.highlight-module.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/api-docs/_sources/binaryninja.highlight.HighlightColor.txt b/api-docs/_sources/binaryninja.highlight.HighlightColor.txt new file mode 100644 index 0000000..4bfd1df --- /dev/null +++ b/api-docs/_sources/binaryninja.highlight.HighlightColor.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/api-docs/_sources/binaryninja.interaction-module.txt b/api-docs/_sources/binaryninja.interaction-module.txt new file mode 100644 index 0000000..6fc70d4 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction-module.txt @@ -0,0 +1,40 @@ +interaction module +===================== + +.. autosummary:: + :toctree: + + binaryninja.interaction.AddressField + binaryninja.interaction.ChoiceField + binaryninja.interaction.DirectoryNameField + binaryninja.interaction.IntegerField + binaryninja.interaction.InteractionHandler + binaryninja.interaction.LabelField + binaryninja.interaction.MultilineTextField + binaryninja.interaction.OpenFileNameField + 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_html_report + binaryninja.interaction.show_markdown_report + binaryninja.interaction.show_message_box + binaryninja.interaction.show_plain_text_report + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.interaction + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.interaction.AddressField.txt b/api-docs/_sources/binaryninja.interaction.AddressField.txt new file mode 100644 index 0000000..76c6b82 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.AddressField.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/api-docs/_sources/binaryninja.interaction.ChoiceField.txt b/api-docs/_sources/binaryninja.interaction.ChoiceField.txt new file mode 100644 index 0000000..3acd35f --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.ChoiceField.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/api-docs/_sources/binaryninja.interaction.DirectoryNameField.txt b/api-docs/_sources/binaryninja.interaction.DirectoryNameField.txt new file mode 100644 index 0000000..578baa2 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.DirectoryNameField.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/api-docs/_sources/binaryninja.interaction.IntegerField.txt b/api-docs/_sources/binaryninja.interaction.IntegerField.txt new file mode 100644 index 0000000..6a7111a --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.IntegerField.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/api-docs/_sources/binaryninja.interaction.InteractionHandler.txt b/api-docs/_sources/binaryninja.interaction.InteractionHandler.txt new file mode 100644 index 0000000..eef6706 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.InteractionHandler.txt @@ -0,0 +1,35 @@ +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_html_report + ~InteractionHandler.show_markdown_report + ~InteractionHandler.show_message_box + ~InteractionHandler.show_plain_text_report + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.interaction.LabelField.txt b/api-docs/_sources/binaryninja.interaction.LabelField.txt new file mode 100644 index 0000000..57f9dcf --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.LabelField.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/api-docs/_sources/binaryninja.interaction.MultilineTextField.txt b/api-docs/_sources/binaryninja.interaction.MultilineTextField.txt new file mode 100644 index 0000000..e55d68e --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.MultilineTextField.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/api-docs/_sources/binaryninja.interaction.OpenFileNameField.txt b/api-docs/_sources/binaryninja.interaction.OpenFileNameField.txt new file mode 100644 index 0000000..04fe13c --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.OpenFileNameField.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/api-docs/_sources/binaryninja.interaction.SaveFileNameField.txt b/api-docs/_sources/binaryninja.interaction.SaveFileNameField.txt new file mode 100644 index 0000000..61e4bfb --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.SaveFileNameField.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/api-docs/_sources/binaryninja.interaction.SeparatorField.txt b/api-docs/_sources/binaryninja.interaction.SeparatorField.txt new file mode 100644 index 0000000..830851b --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.SeparatorField.txt @@ -0,0 +1,16 @@ +binaryninja.interaction.SeparatorField +====================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: SeparatorField + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.interaction.TextLineField.txt b/api-docs/_sources/binaryninja.interaction.TextLineField.txt new file mode 100644 index 0000000..6433f49 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.TextLineField.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/api-docs/_sources/binaryninja.interaction.get_address_input.txt b/api-docs/_sources/binaryninja.interaction.get_address_input.txt new file mode 100644 index 0000000..a648861 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_address_input.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/api-docs/_sources/binaryninja.interaction.get_choice_input.txt b/api-docs/_sources/binaryninja.interaction.get_choice_input.txt new file mode 100644 index 0000000..36279fc --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_choice_input.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/api-docs/_sources/binaryninja.interaction.get_directory_name_input.txt b/api-docs/_sources/binaryninja.interaction.get_directory_name_input.txt new file mode 100644 index 0000000..35f0e96 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_directory_name_input.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/api-docs/_sources/binaryninja.interaction.get_form_input.txt b/api-docs/_sources/binaryninja.interaction.get_form_input.txt new file mode 100644 index 0000000..c010f69 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_form_input.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/api-docs/_sources/binaryninja.interaction.get_int_input.txt b/api-docs/_sources/binaryninja.interaction.get_int_input.txt new file mode 100644 index 0000000..17738e8 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_int_input.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/api-docs/_sources/binaryninja.interaction.get_open_filename_input.txt b/api-docs/_sources/binaryninja.interaction.get_open_filename_input.txt new file mode 100644 index 0000000..da0e98d --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_open_filename_input.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/api-docs/_sources/binaryninja.interaction.get_save_filename_input.txt b/api-docs/_sources/binaryninja.interaction.get_save_filename_input.txt new file mode 100644 index 0000000..d12ba7a --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_save_filename_input.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/api-docs/_sources/binaryninja.interaction.get_text_line_input.txt b/api-docs/_sources/binaryninja.interaction.get_text_line_input.txt new file mode 100644 index 0000000..39368a6 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.get_text_line_input.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/api-docs/_sources/binaryninja.interaction.markdown_to_html.txt b/api-docs/_sources/binaryninja.interaction.markdown_to_html.txt new file mode 100644 index 0000000..a318c18 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.markdown_to_html.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/api-docs/_sources/binaryninja.interaction.range.txt b/api-docs/_sources/binaryninja.interaction.range.txt new file mode 100644 index 0000000..449eb99 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.range.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.range +============================= + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.interaction.show_html_report.txt b/api-docs/_sources/binaryninja.interaction.show_html_report.txt new file mode 100644 index 0000000..094f6a5 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.show_html_report.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/api-docs/_sources/binaryninja.interaction.show_markdown_report.txt b/api-docs/_sources/binaryninja.interaction.show_markdown_report.txt new file mode 100644 index 0000000..7652b9f --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.show_markdown_report.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/api-docs/_sources/binaryninja.interaction.show_message_box.txt b/api-docs/_sources/binaryninja.interaction.show_message_box.txt new file mode 100644 index 0000000..cc9b099 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.show_message_box.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/api-docs/_sources/binaryninja.interaction.show_plain_text_report.txt b/api-docs/_sources/binaryninja.interaction.show_plain_text_report.txt new file mode 100644 index 0000000..21b4e13 --- /dev/null +++ b/api-docs/_sources/binaryninja.interaction.show_plain_text_report.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/api-docs/_sources/binaryninja.lineardisassembly-module.txt b/api-docs/_sources/binaryninja.lineardisassembly-module.txt new file mode 100644 index 0000000..1876686 --- /dev/null +++ b/api-docs/_sources/binaryninja.lineardisassembly-module.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/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyLine.txt b/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyLine.txt new file mode 100644 index 0000000..c23bdf2 --- /dev/null +++ b/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyLine.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/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyPosition.txt b/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyPosition.txt new file mode 100644 index 0000000..e54937a --- /dev/null +++ b/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyPosition.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/api-docs/_sources/binaryninja.log-module.txt b/api-docs/_sources/binaryninja.log-module.txt new file mode 100644 index 0000000..df26d0f --- /dev/null +++ b/api-docs/_sources/binaryninja.log-module.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/api-docs/_sources/binaryninja.log.close_logs.txt b/api-docs/_sources/binaryninja.log.close_logs.txt new file mode 100644 index 0000000..82a3370 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.close_logs.txt @@ -0,0 +1,6 @@ +binaryninja.log.close_logs +========================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: close_logs \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.log.is_output_redirected_to_log.txt b/api-docs/_sources/binaryninja.log.is_output_redirected_to_log.txt new file mode 100644 index 0000000..13a2f1c --- /dev/null +++ b/api-docs/_sources/binaryninja.log.is_output_redirected_to_log.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/api-docs/_sources/binaryninja.log.log.txt b/api-docs/_sources/binaryninja.log.log.txt new file mode 100644 index 0000000..3b63d02 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log.txt @@ -0,0 +1,6 @@ +binaryninja.log.log +=================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.log.log_alert.txt b/api-docs/_sources/binaryninja.log.log_alert.txt new file mode 100644 index 0000000..c30a288 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_alert.txt @@ -0,0 +1,6 @@ +binaryninja.log.log_alert +========================= + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_alert \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.log.log_debug.txt b/api-docs/_sources/binaryninja.log.log_debug.txt new file mode 100644 index 0000000..c827d4a --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_debug.txt @@ -0,0 +1,6 @@ +binaryninja.log.log_debug +========================= + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_debug \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.log.log_error.txt b/api-docs/_sources/binaryninja.log.log_error.txt new file mode 100644 index 0000000..fbde354 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_error.txt @@ -0,0 +1,6 @@ +binaryninja.log.log_error +========================= + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_error \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.log.log_info.txt b/api-docs/_sources/binaryninja.log.log_info.txt new file mode 100644 index 0000000..2b5fa93 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_info.txt @@ -0,0 +1,6 @@ +binaryninja.log.log_info +======================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_info \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.log.log_to_file.txt b/api-docs/_sources/binaryninja.log.log_to_file.txt new file mode 100644 index 0000000..0f49447 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_to_file.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/api-docs/_sources/binaryninja.log.log_to_stderr.txt b/api-docs/_sources/binaryninja.log.log_to_stderr.txt new file mode 100644 index 0000000..3dbc9cb --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_to_stderr.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/api-docs/_sources/binaryninja.log.log_to_stdout.txt b/api-docs/_sources/binaryninja.log.log_to_stdout.txt new file mode 100644 index 0000000..a4d4050 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_to_stdout.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/api-docs/_sources/binaryninja.log.log_warn.txt b/api-docs/_sources/binaryninja.log.log_warn.txt new file mode 100644 index 0000000..cf72e21 --- /dev/null +++ b/api-docs/_sources/binaryninja.log.log_warn.txt @@ -0,0 +1,6 @@ +binaryninja.log.log_warn +======================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_warn \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.log.redirect_output_to_log.txt b/api-docs/_sources/binaryninja.log.redirect_output_to_log.txt new file mode 100644 index 0000000..9ab5aea --- /dev/null +++ b/api-docs/_sources/binaryninja.log.redirect_output_to_log.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/api-docs/_sources/binaryninja.lowlevelil-module.txt b/api-docs/_sources/binaryninja.lowlevelil-module.txt new file mode 100644 index 0000000..269adb8 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil-module.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/api-docs/_sources/binaryninja.lowlevelil.ILFlag.txt b/api-docs/_sources/binaryninja.lowlevelil.ILFlag.txt new file mode 100644 index 0000000..7c5409f --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.ILFlag.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/api-docs/_sources/binaryninja.lowlevelil.ILIntrinsic.txt b/api-docs/_sources/binaryninja.lowlevelil.ILIntrinsic.txt new file mode 100644 index 0000000..dc00745 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.ILIntrinsic.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/api-docs/_sources/binaryninja.lowlevelil.ILRegister.txt b/api-docs/_sources/binaryninja.lowlevelil.ILRegister.txt new file mode 100644 index 0000000..98af114 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.ILRegister.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/api-docs/_sources/binaryninja.lowlevelil.ILRegisterStack.txt b/api-docs/_sources/binaryninja.lowlevelil.ILRegisterStack.txt new file mode 100644 index 0000000..ecbeeb9 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.ILRegisterStack.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/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagClass.txt b/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagClass.txt new file mode 100644 index 0000000..b5b3e82 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagClass.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/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagGroup.txt b/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagGroup.txt new file mode 100644 index 0000000..3958662 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagGroup.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/api-docs/_sources/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.txt b/api-docs/_sources/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.txt new file mode 100644 index 0000000..61290c0 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.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/api-docs/_sources/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.txt b/api-docs/_sources/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.txt new file mode 100644 index 0000000..8684dc9 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.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/api-docs/_sources/binaryninja.lowlevelil.LLIL_TEMP.txt b/api-docs/_sources/binaryninja.lowlevelil.LLIL_TEMP.txt new file mode 100644 index 0000000..f556507 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LLIL_TEMP.txt @@ -0,0 +1,6 @@ +binaryninja.lowlevelil.LLIL_TEMP +================================ + +.. currentmodule:: binaryninja.lowlevelil + +.. autofunction:: LLIL_TEMP \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.lowlevelil.LowLevelILBasicBlock.txt b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILBasicBlock.txt new file mode 100644 index 0000000..650859f --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILBasicBlock.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/api-docs/_sources/binaryninja.lowlevelil.LowLevelILExpr.txt b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILExpr.txt new file mode 100644 index 0000000..3211ae5 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILExpr.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/api-docs/_sources/binaryninja.lowlevelil.LowLevelILFunction.txt b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILFunction.txt new file mode 100644 index 0000000..94316e9 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILFunction.txt @@ -0,0 +1,162 @@ +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.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.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.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/api-docs/_sources/binaryninja.lowlevelil.LowLevelILInstruction.txt b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILInstruction.txt new file mode 100644 index 0000000..604366a --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILInstruction.txt @@ -0,0 +1,49 @@ +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.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/api-docs/_sources/binaryninja.lowlevelil.LowLevelILLabel.txt b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILLabel.txt new file mode 100644 index 0000000..9b46de7 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILLabel.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/api-docs/_sources/binaryninja.lowlevelil.LowLevelILOperationAndSize.txt b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILOperationAndSize.txt new file mode 100644 index 0000000..09e689d --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.LowLevelILOperationAndSize.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/api-docs/_sources/binaryninja.lowlevelil.SSAFlag.txt b/api-docs/_sources/binaryninja.lowlevelil.SSAFlag.txt new file mode 100644 index 0000000..8419e0f --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.SSAFlag.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/api-docs/_sources/binaryninja.lowlevelil.SSARegister.txt b/api-docs/_sources/binaryninja.lowlevelil.SSARegister.txt new file mode 100644 index 0000000..2e9c84c --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.SSARegister.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/api-docs/_sources/binaryninja.lowlevelil.SSARegisterOrFlag.txt b/api-docs/_sources/binaryninja.lowlevelil.SSARegisterOrFlag.txt new file mode 100644 index 0000000..9469e89 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.SSARegisterOrFlag.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/api-docs/_sources/binaryninja.lowlevelil.SSARegisterStack.txt b/api-docs/_sources/binaryninja.lowlevelil.SSARegisterStack.txt new file mode 100644 index 0000000..1a8c246 --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.SSARegisterStack.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/api-docs/_sources/binaryninja.lowlevelil.range.txt b/api-docs/_sources/binaryninja.lowlevelil.range.txt new file mode 100644 index 0000000..d4ee33c --- /dev/null +++ b/api-docs/_sources/binaryninja.lowlevelil.range.txt @@ -0,0 +1,6 @@ +binaryninja.lowlevelil.range +============================ + +.. currentmodule:: binaryninja.lowlevelil + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.mainthread-module.txt b/api-docs/_sources/binaryninja.mainthread-module.txt new file mode 100644 index 0000000..9241381 --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread-module.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/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread.txt b/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread.txt new file mode 100644 index 0000000..f502e01 --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread.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/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread_and_wait.txt b/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread_and_wait.txt new file mode 100644 index 0000000..9f8a3eb --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread_and_wait.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/api-docs/_sources/binaryninja.mainthread.get_worker_thread_count.txt b/api-docs/_sources/binaryninja.mainthread.get_worker_thread_count.txt new file mode 100644 index 0000000..6743354 --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread.get_worker_thread_count.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/api-docs/_sources/binaryninja.mainthread.set_worker_thread_count.txt b/api-docs/_sources/binaryninja.mainthread.set_worker_thread_count.txt new file mode 100644 index 0000000..6edc698 --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread.set_worker_thread_count.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/api-docs/_sources/binaryninja.mainthread.worker_enqueue.txt b/api-docs/_sources/binaryninja.mainthread.worker_enqueue.txt new file mode 100644 index 0000000..5ccf024 --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread.worker_enqueue.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.worker_enqueue +===================================== + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: worker_enqueue \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.mainthread.worker_interactive_enqueue.txt b/api-docs/_sources/binaryninja.mainthread.worker_interactive_enqueue.txt new file mode 100644 index 0000000..f5bfcd3 --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread.worker_interactive_enqueue.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/api-docs/_sources/binaryninja.mainthread.worker_priority_enqueue.txt b/api-docs/_sources/binaryninja.mainthread.worker_priority_enqueue.txt new file mode 100644 index 0000000..ae6341f --- /dev/null +++ b/api-docs/_sources/binaryninja.mainthread.worker_priority_enqueue.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/api-docs/_sources/binaryninja.mediumlevelil-module.txt b/api-docs/_sources/binaryninja.mediumlevelil-module.txt new file mode 100644 index 0000000..7d703c1 --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil-module.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/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILBasicBlock.txt b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILBasicBlock.txt new file mode 100644 index 0000000..85316c1 --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILBasicBlock.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/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILExpr.txt b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILExpr.txt new file mode 100644 index 0000000..b648b4a --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILExpr.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/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILFunction.txt b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILFunction.txt new file mode 100644 index 0000000..312507d --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILFunction.txt @@ -0,0 +1,55 @@ +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.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.low_level_il + ~MediumLevelILFunction.non_ssa_form + ~MediumLevelILFunction.ssa_form + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILInstruction.txt b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILInstruction.txt new file mode 100644 index 0000000..5009d20 --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILInstruction.txt @@ -0,0 +1,59 @@ +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.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/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILLabel.txt b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILLabel.txt new file mode 100644 index 0000000..1f989b7 --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILLabel.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/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.txt b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.txt new file mode 100644 index 0000000..42f24cc --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.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/api-docs/_sources/binaryninja.mediumlevelil.SSAVariable.txt b/api-docs/_sources/binaryninja.mediumlevelil.SSAVariable.txt new file mode 100644 index 0000000..d267b0f --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.SSAVariable.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/api-docs/_sources/binaryninja.mediumlevelil.range.txt b/api-docs/_sources/binaryninja.mediumlevelil.range.txt new file mode 100644 index 0000000..d341a19 --- /dev/null +++ b/api-docs/_sources/binaryninja.mediumlevelil.range.txt @@ -0,0 +1,6 @@ +binaryninja.mediumlevelil.range +=============================== + +.. currentmodule:: binaryninja.mediumlevelil + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.metadata-module.txt b/api-docs/_sources/binaryninja.metadata-module.txt new file mode 100644 index 0000000..0b0f177 --- /dev/null +++ b/api-docs/_sources/binaryninja.metadata-module.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/api-docs/_sources/binaryninja.metadata.Metadata.txt b/api-docs/_sources/binaryninja.metadata.Metadata.txt new file mode 100644 index 0000000..8aec247 --- /dev/null +++ b/api-docs/_sources/binaryninja.metadata.Metadata.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/api-docs/_sources/binaryninja.metadata.pyNativeStr.txt b/api-docs/_sources/binaryninja.metadata.pyNativeStr.txt new file mode 100644 index 0000000..8dfd46f --- /dev/null +++ b/api-docs/_sources/binaryninja.metadata.pyNativeStr.txt @@ -0,0 +1,6 @@ +binaryninja.metadata.pyNativeStr +================================ + +.. currentmodule:: binaryninja.metadata + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.metadata.range.txt b/api-docs/_sources/binaryninja.metadata.range.txt new file mode 100644 index 0000000..936270a --- /dev/null +++ b/api-docs/_sources/binaryninja.metadata.range.txt @@ -0,0 +1,6 @@ +binaryninja.metadata.range +========================== + +.. currentmodule:: binaryninja.metadata + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.platform-module.txt b/api-docs/_sources/binaryninja.platform-module.txt new file mode 100644 index 0000000..bce9272 --- /dev/null +++ b/api-docs/_sources/binaryninja.platform-module.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/api-docs/_sources/binaryninja.platform.Platform.txt b/api-docs/_sources/binaryninja.platform.Platform.txt new file mode 100644 index 0000000..a0d305c --- /dev/null +++ b/api-docs/_sources/binaryninja.platform.Platform.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/api-docs/_sources/binaryninja.platform.range.txt b/api-docs/_sources/binaryninja.platform.range.txt new file mode 100644 index 0000000..4eb9cbd --- /dev/null +++ b/api-docs/_sources/binaryninja.platform.range.txt @@ -0,0 +1,6 @@ +binaryninja.platform.range +========================== + +.. currentmodule:: binaryninja.platform + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.platform.with_metaclass.txt b/api-docs/_sources/binaryninja.platform.with_metaclass.txt new file mode 100644 index 0000000..709402b --- /dev/null +++ b/api-docs/_sources/binaryninja.platform.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.platform.with_metaclass +=================================== + +.. currentmodule:: binaryninja.platform + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.plugin-module.txt b/api-docs/_sources/binaryninja.plugin-module.txt new file mode 100644 index 0000000..a1e0156 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin-module.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/api-docs/_sources/binaryninja.plugin.BackgroundTask.txt b/api-docs/_sources/binaryninja.plugin.BackgroundTask.txt new file mode 100644 index 0000000..2b68d88 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.BackgroundTask.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/api-docs/_sources/binaryninja.plugin.BackgroundTaskThread.txt b/api-docs/_sources/binaryninja.plugin.BackgroundTaskThread.txt new file mode 100644 index 0000000..36bce1f --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.BackgroundTaskThread.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/api-docs/_sources/binaryninja.plugin.MainThreadAction.txt b/api-docs/_sources/binaryninja.plugin.MainThreadAction.txt new file mode 100644 index 0000000..0597df9 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.MainThreadAction.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/api-docs/_sources/binaryninja.plugin.MainThreadActionHandler.txt b/api-docs/_sources/binaryninja.plugin.MainThreadActionHandler.txt new file mode 100644 index 0000000..e166a15 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.MainThreadActionHandler.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/api-docs/_sources/binaryninja.plugin.PluginCommand.txt b/api-docs/_sources/binaryninja.plugin.PluginCommand.txt new file mode 100644 index 0000000..18c5e1f --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.PluginCommand.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/api-docs/_sources/binaryninja.plugin.PluginCommandContext.txt b/api-docs/_sources/binaryninja.plugin.PluginCommandContext.txt new file mode 100644 index 0000000..cd3c426 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.PluginCommandContext.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/api-docs/_sources/binaryninja.plugin.log.txt b/api-docs/_sources/binaryninja.plugin.log.txt new file mode 100644 index 0000000..1648dc1 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.log.txt @@ -0,0 +1,6 @@ +binaryninja.plugin.log +====================== + +.. currentmodule:: binaryninja.plugin + +.. autofunction:: log \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.plugin.range.txt b/api-docs/_sources/binaryninja.plugin.range.txt new file mode 100644 index 0000000..7f87675 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.range.txt @@ -0,0 +1,6 @@ +binaryninja.plugin.range +======================== + +.. currentmodule:: binaryninja.plugin + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.plugin.with_metaclass.txt b/api-docs/_sources/binaryninja.plugin.with_metaclass.txt new file mode 100644 index 0000000..160dfd8 --- /dev/null +++ b/api-docs/_sources/binaryninja.plugin.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.plugin.with_metaclass +================================= + +.. currentmodule:: binaryninja.plugin + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pluginmanager-module.txt b/api-docs/_sources/binaryninja.pluginmanager-module.txt new file mode 100644 index 0000000..d3ccd0a --- /dev/null +++ b/api-docs/_sources/binaryninja.pluginmanager-module.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/api-docs/_sources/binaryninja.pluginmanager.RepoPlugin.txt b/api-docs/_sources/binaryninja.pluginmanager.RepoPlugin.txt new file mode 100644 index 0000000..2d94e90 --- /dev/null +++ b/api-docs/_sources/binaryninja.pluginmanager.RepoPlugin.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/api-docs/_sources/binaryninja.pluginmanager.Repository.txt b/api-docs/_sources/binaryninja.pluginmanager.Repository.txt new file mode 100644 index 0000000..6c058f1 --- /dev/null +++ b/api-docs/_sources/binaryninja.pluginmanager.Repository.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/api-docs/_sources/binaryninja.pluginmanager.RepositoryManager.txt b/api-docs/_sources/binaryninja.pluginmanager.RepositoryManager.txt new file mode 100644 index 0000000..9252a0a --- /dev/null +++ b/api-docs/_sources/binaryninja.pluginmanager.RepositoryManager.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/api-docs/_sources/binaryninja.pluginmanager.range.txt b/api-docs/_sources/binaryninja.pluginmanager.range.txt new file mode 100644 index 0000000..c87f0b7 --- /dev/null +++ b/api-docs/_sources/binaryninja.pluginmanager.range.txt @@ -0,0 +1,6 @@ +binaryninja.pluginmanager.range +=============================== + +.. currentmodule:: binaryninja.pluginmanager + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl-module.txt b/api-docs/_sources/binaryninja.pyopenssl-module.txt new file mode 100644 index 0000000..2c84d5f --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl-module.txt @@ -0,0 +1,25 @@ +pyopenssl module +===================== + +.. autosummary:: + :toctree: + + binaryninja.pyopenssl.BytesIO + binaryninja.pyopenssl.PyOpenSSLContext + binaryninja.pyopenssl.SocketError + binaryninja.pyopenssl.WrappedSocket + binaryninja.pyopenssl.orig_util_SSLContext + binaryninja.pyopenssl.timeout + binaryninja.pyopenssl.extract_from_urllib3 + binaryninja.pyopenssl.get_subj_alt_name + binaryninja.pyopenssl.inject_into_urllib3 + binaryninja.pyopenssl.makefile + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.pyopenssl + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.BytesIO.txt b/api-docs/_sources/binaryninja.pyopenssl.BytesIO.txt new file mode 100644 index 0000000..0a85465 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.BytesIO.txt @@ -0,0 +1,47 @@ +binaryninja.pyopenssl.BytesIO +============================= + +.. currentmodule:: binaryninja.pyopenssl + +.. autoclass:: BytesIO + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BytesIO.close + ~BytesIO.detach + ~BytesIO.fileno + ~BytesIO.flush + ~BytesIO.getvalue + ~BytesIO.isatty + ~BytesIO.read + ~BytesIO.read1 + ~BytesIO.readable + ~BytesIO.readinto + ~BytesIO.readline + ~BytesIO.readlines + ~BytesIO.seek + ~BytesIO.seekable + ~BytesIO.tell + ~BytesIO.truncate + ~BytesIO.writable + ~BytesIO.write + ~BytesIO.writelines + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~BytesIO.closed + ~BytesIO.next + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.PyOpenSSLContext.txt b/api-docs/_sources/binaryninja.pyopenssl.PyOpenSSLContext.txt new file mode 100644 index 0000000..bf524e3 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.PyOpenSSLContext.txt @@ -0,0 +1,34 @@ +binaryninja.pyopenssl.PyOpenSSLContext +====================================== + +.. currentmodule:: binaryninja.pyopenssl + +.. autoclass:: PyOpenSSLContext + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PyOpenSSLContext.__init__ + ~PyOpenSSLContext.load_cert_chain + ~PyOpenSSLContext.load_verify_locations + ~PyOpenSSLContext.set_ciphers + ~PyOpenSSLContext.set_default_verify_paths + ~PyOpenSSLContext.wrap_socket + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PyOpenSSLContext.options + ~PyOpenSSLContext.verify_mode + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.SocketError.txt b/api-docs/_sources/binaryninja.pyopenssl.SocketError.txt new file mode 100644 index 0000000..0317aad --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.SocketError.txt @@ -0,0 +1,6 @@ +binaryninja.pyopenssl.SocketError +================================= + +.. currentmodule:: binaryninja.pyopenssl + +.. autoexception:: SocketError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.WrappedSocket.txt b/api-docs/_sources/binaryninja.pyopenssl.WrappedSocket.txt new file mode 100644 index 0000000..2dadc85 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.WrappedSocket.txt @@ -0,0 +1,31 @@ +binaryninja.pyopenssl.WrappedSocket +=================================== + +.. currentmodule:: binaryninja.pyopenssl + +.. autoclass:: WrappedSocket + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~WrappedSocket.__init__ + ~WrappedSocket.close + ~WrappedSocket.fileno + ~WrappedSocket.getpeercert + ~WrappedSocket.makefile + ~WrappedSocket.recv + ~WrappedSocket.recv_into + ~WrappedSocket.sendall + ~WrappedSocket.settimeout + ~WrappedSocket.shutdown + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.extract_from_urllib3.txt b/api-docs/_sources/binaryninja.pyopenssl.extract_from_urllib3.txt new file mode 100644 index 0000000..91910f8 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.extract_from_urllib3.txt @@ -0,0 +1,6 @@ +binaryninja.pyopenssl.extract_from_urllib3 +========================================== + +.. currentmodule:: binaryninja.pyopenssl + +.. autofunction:: extract_from_urllib3 \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.get_subj_alt_name.txt b/api-docs/_sources/binaryninja.pyopenssl.get_subj_alt_name.txt new file mode 100644 index 0000000..12a839d --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.get_subj_alt_name.txt @@ -0,0 +1,6 @@ +binaryninja.pyopenssl.get_subj_alt_name +======================================= + +.. currentmodule:: binaryninja.pyopenssl + +.. autofunction:: get_subj_alt_name \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.inject_into_urllib3.txt b/api-docs/_sources/binaryninja.pyopenssl.inject_into_urllib3.txt new file mode 100644 index 0000000..7870901 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.inject_into_urllib3.txt @@ -0,0 +1,6 @@ +binaryninja.pyopenssl.inject_into_urllib3 +========================================= + +.. currentmodule:: binaryninja.pyopenssl + +.. autofunction:: inject_into_urllib3 \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.makefile.txt b/api-docs/_sources/binaryninja.pyopenssl.makefile.txt new file mode 100644 index 0000000..f3fedf4 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.makefile.txt @@ -0,0 +1,6 @@ +binaryninja.pyopenssl.makefile +============================== + +.. currentmodule:: binaryninja.pyopenssl + +.. autofunction:: makefile \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.orig_util_SSLContext.txt b/api-docs/_sources/binaryninja.pyopenssl.orig_util_SSLContext.txt new file mode 100644 index 0000000..57787e8 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.orig_util_SSLContext.txt @@ -0,0 +1,32 @@ +binaryninja.pyopenssl.orig_util_SSLContext +========================================== + +.. currentmodule:: binaryninja.pyopenssl + +.. autoclass:: orig_util_SSLContext + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~orig_util_SSLContext.__init__ + ~orig_util_SSLContext.load_cert_chain + ~orig_util_SSLContext.load_verify_locations + ~orig_util_SSLContext.set_ciphers + ~orig_util_SSLContext.wrap_socket + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~orig_util_SSLContext.supports_set_ciphers + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.pyopenssl.timeout.txt b/api-docs/_sources/binaryninja.pyopenssl.timeout.txt new file mode 100644 index 0000000..e3a99c7 --- /dev/null +++ b/api-docs/_sources/binaryninja.pyopenssl.timeout.txt @@ -0,0 +1,6 @@ +binaryninja.pyopenssl.timeout +============================= + +.. currentmodule:: binaryninja.pyopenssl + +.. autoexception:: timeout \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests-module.txt b/api-docs/_sources/binaryninja.requests-module.txt new file mode 100644 index 0000000..711199e --- /dev/null +++ b/api-docs/_sources/binaryninja.requests-module.txt @@ -0,0 +1,41 @@ +requests module +===================== + +.. autosummary:: + :toctree: + + binaryninja.requests.ConnectTimeout + binaryninja.requests.ConnectionError + binaryninja.requests.DependencyWarning + binaryninja.requests.FileModeWarning + binaryninja.requests.HTTPError + binaryninja.requests.NullHandler + binaryninja.requests.PreparedRequest + binaryninja.requests.ReadTimeout + binaryninja.requests.Request + binaryninja.requests.RequestException + binaryninja.requests.RequestsDependencyWarning + binaryninja.requests.Response + binaryninja.requests.Session + binaryninja.requests.Timeout + binaryninja.requests.TooManyRedirects + binaryninja.requests.URLRequired + binaryninja.requests.check_compatibility + binaryninja.requests.delete + binaryninja.requests.get + binaryninja.requests.head + binaryninja.requests.options + binaryninja.requests.patch + binaryninja.requests.post + binaryninja.requests.put + binaryninja.requests.request + binaryninja.requests.session + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.requests + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.ConnectTimeout.txt b/api-docs/_sources/binaryninja.requests.ConnectTimeout.txt new file mode 100644 index 0000000..8ba9d28 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.ConnectTimeout.txt @@ -0,0 +1,6 @@ +binaryninja.requests.ConnectTimeout +=================================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: ConnectTimeout \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.ConnectionError.txt b/api-docs/_sources/binaryninja.requests.ConnectionError.txt new file mode 100644 index 0000000..d22d9cf --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.ConnectionError.txt @@ -0,0 +1,6 @@ +binaryninja.requests.ConnectionError +==================================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: ConnectionError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.DependencyWarning.txt b/api-docs/_sources/binaryninja.requests.DependencyWarning.txt new file mode 100644 index 0000000..77d2b51 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.DependencyWarning.txt @@ -0,0 +1,6 @@ +binaryninja.requests.DependencyWarning +====================================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: DependencyWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.FileModeWarning.txt b/api-docs/_sources/binaryninja.requests.FileModeWarning.txt new file mode 100644 index 0000000..2ab9d5a --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.FileModeWarning.txt @@ -0,0 +1,6 @@ +binaryninja.requests.FileModeWarning +==================================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: FileModeWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.HTTPError.txt b/api-docs/_sources/binaryninja.requests.HTTPError.txt new file mode 100644 index 0000000..6e3959a --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.HTTPError.txt @@ -0,0 +1,6 @@ +binaryninja.requests.HTTPError +============================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: HTTPError \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.NullHandler.txt b/api-docs/_sources/binaryninja.requests.NullHandler.txt new file mode 100644 index 0000000..ed5ff01 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.NullHandler.txt @@ -0,0 +1,44 @@ +binaryninja.requests.NullHandler +================================ + +.. currentmodule:: binaryninja.requests + +.. autoclass:: NullHandler + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~NullHandler.__init__ + ~NullHandler.acquire + ~NullHandler.addFilter + ~NullHandler.close + ~NullHandler.createLock + ~NullHandler.emit + ~NullHandler.filter + ~NullHandler.flush + ~NullHandler.format + ~NullHandler.get_name + ~NullHandler.handle + ~NullHandler.handleError + ~NullHandler.release + ~NullHandler.removeFilter + ~NullHandler.setFormatter + ~NullHandler.setLevel + ~NullHandler.set_name + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~NullHandler.name + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.PreparedRequest.txt b/api-docs/_sources/binaryninja.requests.PreparedRequest.txt new file mode 100644 index 0000000..ebbd134 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.PreparedRequest.txt @@ -0,0 +1,40 @@ +binaryninja.requests.PreparedRequest +==================================== + +.. currentmodule:: binaryninja.requests + +.. autoclass:: PreparedRequest + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PreparedRequest.__init__ + ~PreparedRequest.copy + ~PreparedRequest.deregister_hook + ~PreparedRequest.prepare + ~PreparedRequest.prepare_auth + ~PreparedRequest.prepare_body + ~PreparedRequest.prepare_content_length + ~PreparedRequest.prepare_cookies + ~PreparedRequest.prepare_headers + ~PreparedRequest.prepare_hooks + ~PreparedRequest.prepare_method + ~PreparedRequest.prepare_url + ~PreparedRequest.register_hook + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PreparedRequest.path_url + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.ReadTimeout.txt b/api-docs/_sources/binaryninja.requests.ReadTimeout.txt new file mode 100644 index 0000000..430b3c5 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.ReadTimeout.txt @@ -0,0 +1,6 @@ +binaryninja.requests.ReadTimeout +================================ + +.. currentmodule:: binaryninja.requests + +.. autoexception:: ReadTimeout \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.Request.txt b/api-docs/_sources/binaryninja.requests.Request.txt new file mode 100644 index 0000000..cf8c5bf --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.Request.txt @@ -0,0 +1,25 @@ +binaryninja.requests.Request +============================ + +.. currentmodule:: binaryninja.requests + +.. autoclass:: Request + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Request.__init__ + ~Request.deregister_hook + ~Request.prepare + ~Request.register_hook + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.RequestException.txt b/api-docs/_sources/binaryninja.requests.RequestException.txt new file mode 100644 index 0000000..ec20563 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.RequestException.txt @@ -0,0 +1,6 @@ +binaryninja.requests.RequestException +===================================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: RequestException \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.RequestsDependencyWarning.txt b/api-docs/_sources/binaryninja.requests.RequestsDependencyWarning.txt new file mode 100644 index 0000000..989589b --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.RequestsDependencyWarning.txt @@ -0,0 +1,6 @@ +binaryninja.requests.RequestsDependencyWarning +============================================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: RequestsDependencyWarning \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.Response.txt b/api-docs/_sources/binaryninja.requests.Response.txt new file mode 100644 index 0000000..bf76c5e --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.Response.txt @@ -0,0 +1,40 @@ +binaryninja.requests.Response +============================= + +.. currentmodule:: binaryninja.requests + +.. autoclass:: Response + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Response.__init__ + ~Response.close + ~Response.iter_content + ~Response.iter_lines + ~Response.json + ~Response.raise_for_status + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Response.apparent_encoding + ~Response.content + ~Response.is_permanent_redirect + ~Response.is_redirect + ~Response.links + ~Response.next + ~Response.ok + ~Response.text + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.Session.txt b/api-docs/_sources/binaryninja.requests.Session.txt new file mode 100644 index 0000000..be233c7 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.Session.txt @@ -0,0 +1,41 @@ +binaryninja.requests.Session +============================ + +.. currentmodule:: binaryninja.requests + +.. autoclass:: Session + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Session.__init__ + ~Session.close + ~Session.delete + ~Session.get + ~Session.get_adapter + ~Session.get_redirect_target + ~Session.head + ~Session.merge_environment_settings + ~Session.mount + ~Session.options + ~Session.patch + ~Session.post + ~Session.prepare_request + ~Session.put + ~Session.rebuild_auth + ~Session.rebuild_method + ~Session.rebuild_proxies + ~Session.request + ~Session.resolve_redirects + ~Session.send + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.Timeout.txt b/api-docs/_sources/binaryninja.requests.Timeout.txt new file mode 100644 index 0000000..3058d27 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.Timeout.txt @@ -0,0 +1,6 @@ +binaryninja.requests.Timeout +============================ + +.. currentmodule:: binaryninja.requests + +.. autoexception:: Timeout \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.TooManyRedirects.txt b/api-docs/_sources/binaryninja.requests.TooManyRedirects.txt new file mode 100644 index 0000000..9d72eb3 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.TooManyRedirects.txt @@ -0,0 +1,6 @@ +binaryninja.requests.TooManyRedirects +===================================== + +.. currentmodule:: binaryninja.requests + +.. autoexception:: TooManyRedirects \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.URLRequired.txt b/api-docs/_sources/binaryninja.requests.URLRequired.txt new file mode 100644 index 0000000..262c9c0 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.URLRequired.txt @@ -0,0 +1,6 @@ +binaryninja.requests.URLRequired +================================ + +.. currentmodule:: binaryninja.requests + +.. autoexception:: URLRequired \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.check_compatibility.txt b/api-docs/_sources/binaryninja.requests.check_compatibility.txt new file mode 100644 index 0000000..c5d8118 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.check_compatibility.txt @@ -0,0 +1,6 @@ +binaryninja.requests.check_compatibility +======================================== + +.. currentmodule:: binaryninja.requests + +.. autofunction:: check_compatibility \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.delete.txt b/api-docs/_sources/binaryninja.requests.delete.txt new file mode 100644 index 0000000..237b84b --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.delete.txt @@ -0,0 +1,6 @@ +binaryninja.requests.delete +=========================== + +.. currentmodule:: binaryninja.requests + +.. autofunction:: delete \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.get.txt b/api-docs/_sources/binaryninja.requests.get.txt new file mode 100644 index 0000000..a28bbe3 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.get.txt @@ -0,0 +1,6 @@ +binaryninja.requests.get +======================== + +.. currentmodule:: binaryninja.requests + +.. autofunction:: get \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.head.txt b/api-docs/_sources/binaryninja.requests.head.txt new file mode 100644 index 0000000..dc900ae --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.head.txt @@ -0,0 +1,6 @@ +binaryninja.requests.head +========================= + +.. currentmodule:: binaryninja.requests + +.. autofunction:: head \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.options.txt b/api-docs/_sources/binaryninja.requests.options.txt new file mode 100644 index 0000000..4982706 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.options.txt @@ -0,0 +1,6 @@ +binaryninja.requests.options +============================ + +.. currentmodule:: binaryninja.requests + +.. autofunction:: options \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.patch.txt b/api-docs/_sources/binaryninja.requests.patch.txt new file mode 100644 index 0000000..3a2b66d --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.patch.txt @@ -0,0 +1,6 @@ +binaryninja.requests.patch +========================== + +.. currentmodule:: binaryninja.requests + +.. autofunction:: patch \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.post.txt b/api-docs/_sources/binaryninja.requests.post.txt new file mode 100644 index 0000000..1310c94 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.post.txt @@ -0,0 +1,6 @@ +binaryninja.requests.post +========================= + +.. currentmodule:: binaryninja.requests + +.. autofunction:: post \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.put.txt b/api-docs/_sources/binaryninja.requests.put.txt new file mode 100644 index 0000000..5aff0c5 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.put.txt @@ -0,0 +1,6 @@ +binaryninja.requests.put +======================== + +.. currentmodule:: binaryninja.requests + +.. autofunction:: put \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.request.txt b/api-docs/_sources/binaryninja.requests.request.txt new file mode 100644 index 0000000..4c34b97 --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.request.txt @@ -0,0 +1,6 @@ +binaryninja.requests.request +============================ + +.. currentmodule:: binaryninja.requests + +.. autofunction:: request \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.requests.session.txt b/api-docs/_sources/binaryninja.requests.session.txt new file mode 100644 index 0000000..b93915e --- /dev/null +++ b/api-docs/_sources/binaryninja.requests.session.txt @@ -0,0 +1,6 @@ +binaryninja.requests.session +============================ + +.. currentmodule:: binaryninja.requests + +.. autofunction:: session \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.scriptingprovider-module.txt b/api-docs/_sources/binaryninja.scriptingprovider-module.txt new file mode 100644 index 0000000..6bdc1d5 --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider-module.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/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingInstance.txt b/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingInstance.txt new file mode 100644 index 0000000..8b7a40a --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingInstance.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/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingProvider.txt b/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingProvider.txt new file mode 100644 index 0000000..5c81a90 --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingProvider.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/api-docs/_sources/binaryninja.scriptingprovider.ScriptingInstance.txt b/api-docs/_sources/binaryninja.scriptingprovider.ScriptingInstance.txt new file mode 100644 index 0000000..25f4ff8 --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.ScriptingInstance.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/api-docs/_sources/binaryninja.scriptingprovider.ScriptingOutputListener.txt b/api-docs/_sources/binaryninja.scriptingprovider.ScriptingOutputListener.txt new file mode 100644 index 0000000..947822d --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.ScriptingOutputListener.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/api-docs/_sources/binaryninja.scriptingprovider.ScriptingProvider.txt b/api-docs/_sources/binaryninja.scriptingprovider.ScriptingProvider.txt new file mode 100644 index 0000000..7bf0b3d --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.ScriptingProvider.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/api-docs/_sources/binaryninja.scriptingprovider.range.txt b/api-docs/_sources/binaryninja.scriptingprovider.range.txt new file mode 100644 index 0000000..9573171 --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.range.txt @@ -0,0 +1,6 @@ +binaryninja.scriptingprovider.range +=================================== + +.. currentmodule:: binaryninja.scriptingprovider + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.scriptingprovider.redirect_stdio.txt b/api-docs/_sources/binaryninja.scriptingprovider.redirect_stdio.txt new file mode 100644 index 0000000..3752260 --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.redirect_stdio.txt @@ -0,0 +1,6 @@ +binaryninja.scriptingprovider.redirect_stdio +============================================ + +.. currentmodule:: binaryninja.scriptingprovider + +.. autofunction:: redirect_stdio \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.scriptingprovider.with_metaclass.txt b/api-docs/_sources/binaryninja.scriptingprovider.with_metaclass.txt new file mode 100644 index 0000000..c364d99 --- /dev/null +++ b/api-docs/_sources/binaryninja.scriptingprovider.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.scriptingprovider.with_metaclass +============================================ + +.. currentmodule:: binaryninja.scriptingprovider + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.setting-module.txt b/api-docs/_sources/binaryninja.setting-module.txt new file mode 100644 index 0000000..b69f4f7 --- /dev/null +++ b/api-docs/_sources/binaryninja.setting-module.txt @@ -0,0 +1,18 @@ +setting module +===================== + +.. autosummary:: + :toctree: + + binaryninja.setting.Setting + binaryninja.setting.pyNativeStr + binaryninja.setting.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.setting + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.setting.Setting.txt b/api-docs/_sources/binaryninja.setting.Setting.txt new file mode 100644 index 0000000..bae8ca0 --- /dev/null +++ b/api-docs/_sources/binaryninja.setting.Setting.txt @@ -0,0 +1,44 @@ +binaryninja.setting.Setting +=========================== + +.. currentmodule:: binaryninja.setting + +.. autoclass:: Setting + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Setting.__init__ + ~Setting.get_bool + ~Setting.get_double + ~Setting.get_integer + ~Setting.get_integer_list + ~Setting.get_string + ~Setting.get_string_list + ~Setting.is_bool + ~Setting.is_double + ~Setting.is_integer + ~Setting.is_integer_list + ~Setting.is_present + ~Setting.is_string + ~Setting.is_string_list + ~Setting.remove_setting + ~Setting.remove_setting_group + ~Setting.set + ~Setting.set_bool + ~Setting.set_double + ~Setting.set_integer + ~Setting.set_integer_list + ~Setting.set_string + ~Setting.set_string_list + + + + + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.setting.pyNativeStr.txt b/api-docs/_sources/binaryninja.setting.pyNativeStr.txt new file mode 100644 index 0000000..a36f479 --- /dev/null +++ b/api-docs/_sources/binaryninja.setting.pyNativeStr.txt @@ -0,0 +1,6 @@ +binaryninja.setting.pyNativeStr +=============================== + +.. currentmodule:: binaryninja.setting + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.setting.range.txt b/api-docs/_sources/binaryninja.setting.range.txt new file mode 100644 index 0000000..6da96f0 --- /dev/null +++ b/api-docs/_sources/binaryninja.setting.range.txt @@ -0,0 +1,6 @@ +binaryninja.setting.range +========================= + +.. currentmodule:: binaryninja.setting + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.transform-module.txt b/api-docs/_sources/binaryninja.transform-module.txt new file mode 100644 index 0000000..a0e0417 --- /dev/null +++ b/api-docs/_sources/binaryninja.transform-module.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/api-docs/_sources/binaryninja.transform.Transform.txt b/api-docs/_sources/binaryninja.transform.Transform.txt new file mode 100644 index 0000000..30d8321 --- /dev/null +++ b/api-docs/_sources/binaryninja.transform.Transform.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/api-docs/_sources/binaryninja.transform.TransformParameter.txt b/api-docs/_sources/binaryninja.transform.TransformParameter.txt new file mode 100644 index 0000000..e5688fa --- /dev/null +++ b/api-docs/_sources/binaryninja.transform.TransformParameter.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/api-docs/_sources/binaryninja.transform.range.txt b/api-docs/_sources/binaryninja.transform.range.txt new file mode 100644 index 0000000..a29667c --- /dev/null +++ b/api-docs/_sources/binaryninja.transform.range.txt @@ -0,0 +1,6 @@ +binaryninja.transform.range +=========================== + +.. currentmodule:: binaryninja.transform + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.transform.with_metaclass.txt b/api-docs/_sources/binaryninja.transform.with_metaclass.txt new file mode 100644 index 0000000..26e8883 --- /dev/null +++ b/api-docs/_sources/binaryninja.transform.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.transform.with_metaclass +==================================== + +.. currentmodule:: binaryninja.transform + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.types-module.txt b/api-docs/_sources/binaryninja.types-module.txt new file mode 100644 index 0000000..8e63e83 --- /dev/null +++ b/api-docs/_sources/binaryninja.types-module.txt @@ -0,0 +1,33 @@ +types module +===================== + +.. autosummary:: + :toctree: + + binaryninja.types.BoolWithConfidence + binaryninja.types.Enumeration + binaryninja.types.EnumerationMember + binaryninja.types.FunctionParameter + 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/api-docs/_sources/binaryninja.types.BoolWithConfidence.txt b/api-docs/_sources/binaryninja.types.BoolWithConfidence.txt new file mode 100644 index 0000000..2989443 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.BoolWithConfidence.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/api-docs/_sources/binaryninja.types.Enumeration.txt b/api-docs/_sources/binaryninja.types.Enumeration.txt new file mode 100644 index 0000000..7014fea --- /dev/null +++ b/api-docs/_sources/binaryninja.types.Enumeration.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/api-docs/_sources/binaryninja.types.EnumerationMember.txt b/api-docs/_sources/binaryninja.types.EnumerationMember.txt new file mode 100644 index 0000000..0b7d572 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.EnumerationMember.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/api-docs/_sources/binaryninja.types.FunctionParameter.txt b/api-docs/_sources/binaryninja.types.FunctionParameter.txt new file mode 100644 index 0000000..476dbd4 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.FunctionParameter.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/api-docs/_sources/binaryninja.types.NamedTypeReference.txt b/api-docs/_sources/binaryninja.types.NamedTypeReference.txt new file mode 100644 index 0000000..9a799f9 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.NamedTypeReference.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/api-docs/_sources/binaryninja.types.QualifiedName.txt b/api-docs/_sources/binaryninja.types.QualifiedName.txt new file mode 100644 index 0000000..f3eaef5 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.QualifiedName.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/api-docs/_sources/binaryninja.types.ReferenceTypeWithConfidence.txt b/api-docs/_sources/binaryninja.types.ReferenceTypeWithConfidence.txt new file mode 100644 index 0000000..0549627 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.ReferenceTypeWithConfidence.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/api-docs/_sources/binaryninja.types.RegisterSet.txt b/api-docs/_sources/binaryninja.types.RegisterSet.txt new file mode 100644 index 0000000..ad2f903 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.RegisterSet.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/api-docs/_sources/binaryninja.types.RegisterStackAdjustmentWithConfidence.txt b/api-docs/_sources/binaryninja.types.RegisterStackAdjustmentWithConfidence.txt new file mode 100644 index 0000000..8e88ef1 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.RegisterStackAdjustmentWithConfidence.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/api-docs/_sources/binaryninja.types.SizeWithConfidence.txt b/api-docs/_sources/binaryninja.types.SizeWithConfidence.txt new file mode 100644 index 0000000..d368488 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.SizeWithConfidence.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/api-docs/_sources/binaryninja.types.Structure.txt b/api-docs/_sources/binaryninja.types.Structure.txt new file mode 100644 index 0000000..b0b4015 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.Structure.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/api-docs/_sources/binaryninja.types.StructureMember.txt b/api-docs/_sources/binaryninja.types.StructureMember.txt new file mode 100644 index 0000000..05d1fbe --- /dev/null +++ b/api-docs/_sources/binaryninja.types.StructureMember.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/api-docs/_sources/binaryninja.types.Symbol.txt b/api-docs/_sources/binaryninja.types.Symbol.txt new file mode 100644 index 0000000..51bd59c --- /dev/null +++ b/api-docs/_sources/binaryninja.types.Symbol.txt @@ -0,0 +1,34 @@ +binaryninja.types.Symbol +======================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: Symbol + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Symbol.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Symbol.address + ~Symbol.auto + ~Symbol.full_name + ~Symbol.name + ~Symbol.raw_name + ~Symbol.short_name + ~Symbol.type + + \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.types.Type.txt b/api-docs/_sources/binaryninja.types.Type.txt new file mode 100644 index 0000000..8420663 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.Type.txt @@ -0,0 +1,69 @@ +binaryninja.types.Type +====================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: Type + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Type.__init__ + ~Type.array + ~Type.bool + ~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/api-docs/_sources/binaryninja.types.TypeParserResult.txt b/api-docs/_sources/binaryninja.types.TypeParserResult.txt new file mode 100644 index 0000000..c953472 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.TypeParserResult.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/api-docs/_sources/binaryninja.types.preprocess_source.txt b/api-docs/_sources/binaryninja.types.preprocess_source.txt new file mode 100644 index 0000000..92d6722 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.preprocess_source.txt @@ -0,0 +1,6 @@ +binaryninja.types.preprocess_source +=================================== + +.. currentmodule:: binaryninja.types + +.. autofunction:: preprocess_source \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.types.pyNativeStr.txt b/api-docs/_sources/binaryninja.types.pyNativeStr.txt new file mode 100644 index 0000000..b0b35b3 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.pyNativeStr.txt @@ -0,0 +1,6 @@ +binaryninja.types.pyNativeStr +============================= + +.. currentmodule:: binaryninja.types + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.types.range.txt b/api-docs/_sources/binaryninja.types.range.txt new file mode 100644 index 0000000..6fb4190 --- /dev/null +++ b/api-docs/_sources/binaryninja.types.range.txt @@ -0,0 +1,6 @@ +binaryninja.types.range +======================= + +.. currentmodule:: binaryninja.types + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.undoaction-module.txt b/api-docs/_sources/binaryninja.undoaction-module.txt new file mode 100644 index 0000000..af8f8da --- /dev/null +++ b/api-docs/_sources/binaryninja.undoaction-module.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/api-docs/_sources/binaryninja.undoaction.UndoAction.txt b/api-docs/_sources/binaryninja.undoaction.UndoAction.txt new file mode 100644 index 0000000..db41caf --- /dev/null +++ b/api-docs/_sources/binaryninja.undoaction.UndoAction.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/api-docs/_sources/binaryninja.update-module.txt b/api-docs/_sources/binaryninja.update-module.txt new file mode 100644 index 0000000..c96d29c --- /dev/null +++ b/api-docs/_sources/binaryninja.update-module.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/api-docs/_sources/binaryninja.update.UpdateChannel.txt b/api-docs/_sources/binaryninja.update.UpdateChannel.txt new file mode 100644 index 0000000..09cf53b --- /dev/null +++ b/api-docs/_sources/binaryninja.update.UpdateChannel.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/api-docs/_sources/binaryninja.update.UpdateProgressCallback.txt b/api-docs/_sources/binaryninja.update.UpdateProgressCallback.txt new file mode 100644 index 0000000..b782d27 --- /dev/null +++ b/api-docs/_sources/binaryninja.update.UpdateProgressCallback.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/api-docs/_sources/binaryninja.update.UpdateVersion.txt b/api-docs/_sources/binaryninja.update.UpdateVersion.txt new file mode 100644 index 0000000..8730471 --- /dev/null +++ b/api-docs/_sources/binaryninja.update.UpdateVersion.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/api-docs/_sources/binaryninja.update.are_auto_updates_enabled.txt b/api-docs/_sources/binaryninja.update.are_auto_updates_enabled.txt new file mode 100644 index 0000000..b790392 --- /dev/null +++ b/api-docs/_sources/binaryninja.update.are_auto_updates_enabled.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/api-docs/_sources/binaryninja.update.get_time_since_last_update_check.txt b/api-docs/_sources/binaryninja.update.get_time_since_last_update_check.txt new file mode 100644 index 0000000..af3f922 --- /dev/null +++ b/api-docs/_sources/binaryninja.update.get_time_since_last_update_check.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/api-docs/_sources/binaryninja.update.install_pending_update.txt b/api-docs/_sources/binaryninja.update.install_pending_update.txt new file mode 100644 index 0000000..9d7fbda --- /dev/null +++ b/api-docs/_sources/binaryninja.update.install_pending_update.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/api-docs/_sources/binaryninja.update.is_update_installation_pending.txt b/api-docs/_sources/binaryninja.update.is_update_installation_pending.txt new file mode 100644 index 0000000..c035354 --- /dev/null +++ b/api-docs/_sources/binaryninja.update.is_update_installation_pending.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/api-docs/_sources/binaryninja.update.range.txt b/api-docs/_sources/binaryninja.update.range.txt new file mode 100644 index 0000000..4e6d238 --- /dev/null +++ b/api-docs/_sources/binaryninja.update.range.txt @@ -0,0 +1,6 @@ +binaryninja.update.range +======================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: range \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.update.set_auto_updates_enabled.txt b/api-docs/_sources/binaryninja.update.set_auto_updates_enabled.txt new file mode 100644 index 0000000..337314a --- /dev/null +++ b/api-docs/_sources/binaryninja.update.set_auto_updates_enabled.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/api-docs/_sources/binaryninja.update.updates_checked.txt b/api-docs/_sources/binaryninja.update.updates_checked.txt new file mode 100644 index 0000000..81de3dc --- /dev/null +++ b/api-docs/_sources/binaryninja.update.updates_checked.txt @@ -0,0 +1,6 @@ +binaryninja.update.updates_checked +================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: updates_checked \ No newline at end of file diff --git a/api-docs/_sources/binaryninja.update.with_metaclass.txt b/api-docs/_sources/binaryninja.update.with_metaclass.txt new file mode 100644 index 0000000..6ba384e --- /dev/null +++ b/api-docs/_sources/binaryninja.update.with_metaclass.txt @@ -0,0 +1,6 @@ +binaryninja.update.with_metaclass +================================= + +.. currentmodule:: binaryninja.update + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/api-docs/_sources/c++.txt b/api-docs/_sources/c++.txt new file mode 100644 index 0000000..6eec16b --- /dev/null +++ b/api-docs/_sources/c++.txt @@ -0,0 +1,10 @@ +Binary Ninja C++ API Documentation +================================== + +.. toctree:: + :maxdepth: 2 + + BinaryView_c++ + Architecture_c++ + Platform_c++ + ConsoleLogging_c++ diff --git a/api-docs/_sources/c.txt b/api-docs/_sources/c.txt new file mode 100644 index 0000000..4f4d597 --- /dev/null +++ b/api-docs/_sources/c.txt @@ -0,0 +1,3 @@ +Binary Ninja C API Documentation +================================ + diff --git a/api-docs/_sources/global.txt b/api-docs/_sources/global.txt new file mode 100644 index 0000000..e69de29 diff --git a/api-docs/_sources/index.txt b/api-docs/_sources/index.txt new file mode 100644 index 0000000..b9b1576 --- /dev/null +++ b/api-docs/_sources/index.txt @@ -0,0 +1,44 @@ +Binary Ninja Python API Documentation +===================================== + +.. toctree:: + :maxdepth: 2 + + architecture + atexit + basicblock + binaryninja + binaryview + builtins + callingconvention + databuffer + demangle + downloadprovider + enums + fileaccessor + filemetadata + function + functionrecognizer + highlight + interaction + lineardisassembly + log + lowlevelil + mainthread + mediumlevelil + metadata + platform + plugin + pluginmanager + pyopenssl + requests + scriptingprovider + setting + transform + types + undoaction + update +.. automodule:: binaryninja + :members: + :undoc-members: + :show-inheritance: diff --git a/api-docs/_sources/old-index.txt b/api-docs/_sources/old-index.txt new file mode 100644 index 0000000..355d690 --- /dev/null +++ b/api-docs/_sources/old-index.txt @@ -0,0 +1,25 @@ +.. Binary Ninja API documentation master file, created by + sphinx-quickstart on Tue Jun 28 23:02:45 2016. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +.. include global.rst + +Binary Ninja API Documentation +============================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + Python API +.. C++ API +.. C API + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/api-docs/_static/ajax-loader.gif b/api-docs/_static/ajax-loader.gif new file mode 100644 index 0000000..61faf8c Binary files /dev/null and b/api-docs/_static/ajax-loader.gif differ diff --git a/api-docs/_static/basic.css b/api-docs/_static/basic.css new file mode 100644 index 0000000..2b513f0 --- /dev/null +++ b/api-docs/_static/basic.css @@ -0,0 +1,604 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2016 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 input[type="text"] { + width: 170px; +} + +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%; +} + +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 dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +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; +} + +/* -- general body styles --------------------------------------------------- */ + +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; +} + +.field-list ul { + padding-left: 1em; +} + +.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 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.field-list td, table.field-list th { + border: 0 !important; +} + +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 { +} + + +/* -- 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, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.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 */ +} + +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; +} + +/* -- 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/api-docs/_static/comment-bright.png b/api-docs/_static/comment-bright.png new file mode 100644 index 0000000..551517b Binary files /dev/null and b/api-docs/_static/comment-bright.png differ diff --git a/api-docs/_static/comment-close.png b/api-docs/_static/comment-close.png new file mode 100644 index 0000000..09b54be Binary files /dev/null and b/api-docs/_static/comment-close.png differ diff --git a/api-docs/_static/comment.png b/api-docs/_static/comment.png new file mode 100644 index 0000000..92feb52 Binary files /dev/null and b/api-docs/_static/comment.png differ diff --git a/api-docs/_static/css/badge_only.css b/api-docs/_static/css/badge_only.css new file mode 100644 index 0000000..90cc697 --- /dev/null +++ b/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/api-docs/_static/css/badge_only.css.map b/api-docs/_static/css/badge_only.css.map new file mode 100644 index 0000000..9d07b87 --- /dev/null +++ b/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/api-docs/_static/css/other.css b/api-docs/_static/css/other.css new file mode 100644 index 0000000..c9600b7 --- /dev/null +++ b/api-docs/_static/css/other.css @@ -0,0 +1,3 @@ +.wy-nav-content { + max-width: 2000px !important; +} diff --git a/api-docs/_static/css/theme.css b/api-docs/_static/css/theme.css new file mode 100644 index 0000000..b4da021 --- /dev/null +++ b/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/api-docs/_static/css/theme.css.map b/api-docs/_static/css/theme.css.map new file mode 100644 index 0000000..96cc9d2 --- /dev/null +++ b/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/api-docs/_static/doctools.js b/api-docs/_static/doctools.js new file mode 100644 index 0000000..8163495 --- /dev/null +++ b/api-docs/_static/doctools.js @@ -0,0 +1,287 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2016 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) { + if (node.nodeType == 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var 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); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/* + * 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(); + + }, + + /** + * 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) + 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(); +}); \ No newline at end of file diff --git a/api-docs/_static/down-pressed.png b/api-docs/_static/down-pressed.png new file mode 100644 index 0000000..7c30d00 Binary files /dev/null and b/api-docs/_static/down-pressed.png differ diff --git a/api-docs/_static/down.png b/api-docs/_static/down.png new file mode 100644 index 0000000..f48098a Binary files /dev/null and b/api-docs/_static/down.png differ diff --git a/api-docs/_static/file.png b/api-docs/_static/file.png new file mode 100644 index 0000000..254c60b Binary files /dev/null and b/api-docs/_static/file.png differ diff --git a/api-docs/_static/fonts/FontAwesome.otf b/api-docs/_static/fonts/FontAwesome.otf new file mode 100644 index 0000000..81c9ad9 Binary files /dev/null and b/api-docs/_static/fonts/FontAwesome.otf differ diff --git a/api-docs/_static/fonts/Inconsolata-Bold.ttf b/api-docs/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 0000000..58c9fef Binary files /dev/null and b/api-docs/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/api-docs/_static/fonts/Inconsolata-Regular.ttf b/api-docs/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 0000000..a87ffba Binary files /dev/null and b/api-docs/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/api-docs/_static/fonts/Lato-Bold.ttf b/api-docs/_static/fonts/Lato-Bold.ttf new file mode 100644 index 0000000..7434369 Binary files /dev/null and b/api-docs/_static/fonts/Lato-Bold.ttf differ diff --git a/api-docs/_static/fonts/Lato-Regular.ttf b/api-docs/_static/fonts/Lato-Regular.ttf new file mode 100644 index 0000000..04ea8ef Binary files /dev/null and b/api-docs/_static/fonts/Lato-Regular.ttf differ diff --git a/api-docs/_static/fonts/RobotoSlab-Bold.ttf b/api-docs/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 0000000..df5d1df Binary files /dev/null and b/api-docs/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/api-docs/_static/fonts/RobotoSlab-Regular.ttf b/api-docs/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 0000000..eb52a79 Binary files /dev/null and b/api-docs/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/api-docs/_static/fonts/fontawesome-webfont.eot b/api-docs/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..84677bc Binary files /dev/null and b/api-docs/_static/fonts/fontawesome-webfont.eot differ diff --git a/api-docs/_static/fonts/fontawesome-webfont.svg b/api-docs/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..d907b25 --- /dev/null +++ b/api-docs/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-docs/_static/fonts/fontawesome-webfont.ttf b/api-docs/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..96a3639 Binary files /dev/null and b/api-docs/_static/fonts/fontawesome-webfont.ttf differ diff --git a/api-docs/_static/fonts/fontawesome-webfont.woff b/api-docs/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..628b6a5 Binary files /dev/null and b/api-docs/_static/fonts/fontawesome-webfont.woff differ diff --git a/api-docs/_static/jquery-1.11.1.js b/api-docs/_static/jquery-1.11.1.js new file mode 100644 index 0000000..d4b67f7 --- /dev/null +++ b/api-docs/_static/jquery-1.11.1.js @@ -0,0 +1,10308 @@ +/*! + * jQuery JavaScript Library v1.11.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-05-01T17:42Z + */ + +(function( global, factory ) { + + 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 inherently posses a window with a document + // (such as Node.js), expose a jQuery-making 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 ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var deletedIds = []; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.11.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.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // 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, + + // Start with an empty selector + selector: "", + + // 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 num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // 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; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + 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(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, 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 = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.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() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + 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 ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + 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 value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + 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 args, proxy, tmp; + + 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: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v1.10.19 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-04-18 + */ +(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" + -(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; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[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 + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // 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 + 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( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "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 = /[+~]/, + rescape = /'|\\/g, + + // 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 ); + }; + +// 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 match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + 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 div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = 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 = attrs.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 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // 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 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 !== strundefined && 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, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + 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 !== strundefined && 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 http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // 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 + // http://bugs.jquery.com/ticket/12359 + div.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 + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowclip^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // 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 ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.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 ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[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 does not implement inclusive descendent + // 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 === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( 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 === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( 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 doc; +}; + +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 && + ( !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.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 !== strundefined && 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 + " " ).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, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + 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 + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && 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 ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // 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 ) { + (node[ expando ] || (node[ expando ] = {}))[ 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.call( 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 ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + 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": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === 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, + checkNonElements = base && dir === "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 ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir 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 ] = {}); + if ( (oldCache = outerCache[ dir ]) && + 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 + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +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.call( 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.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + 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; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // 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; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, 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 ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + 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 no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && 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, + 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 +// 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( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.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( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.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( div ) { + return div.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; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +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 ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + 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; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return 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, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // 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 <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( 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; + + // 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] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).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.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + 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.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.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.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + 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 jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + 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 ) { + do { + cur = cur[ dir ]; + } while ( cur && 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 jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], 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" ? + ( optionsCache[ options ] || 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, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + 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 && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + 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; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).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 = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + 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( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + 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, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // 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; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // 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 ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery(function() { + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // 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 ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( 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 intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, 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 = jQuery._data( 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 cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.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 < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + // Minified: var a,b,c + var input = document.createElement( "input" ), + div = document.createElement( "div" ), + fragment = document.createDocumentFragment(); + + // Setup + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * 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 tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( 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; + } + + // 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 !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + 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/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + 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; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + 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 the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + 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(".") >= 0 ) { + // 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.namespace_re = 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 = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.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) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && 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; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( 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; + 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.namespace_re || event.namespace_re.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 sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + 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 ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + 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 ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.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; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, 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: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // 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 +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +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 mousenter/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; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + 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 ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // 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 ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + 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 this; + } + + 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 this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( 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 ); + }); + }, + + 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 ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "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; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, 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; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + 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 || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.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 ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + 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 ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( 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 this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + 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 ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + 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 arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + 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 this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + 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 ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[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 || "" ) && + !jQuery._data( 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 { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "