summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorJordan Wiens <jordan@psifertex.com>2020-04-01 02:39:22 -0400
committerJordan Wiens <jordan@psifertex.com>2020-04-28 04:22:28 -0400
commita6bc43627e3d884c2e9ad559cc67b4d6353dc12e (patch)
tree7830b79d17efab06f951e8aa875cdde4be6e53b1 /docs
parentd5e7b073574b501c3382d6af2deba947dc39fa12 (diff)
enable auto increment, flesh out type documentation, normalize hotkeys
Diffstat (limited to 'docs')
-rw-r--r--docs/docs.css25
-rw-r--r--docs/getting-started.md149
-rw-r--r--docs/guide/plugins.md6
-rw-r--r--docs/guide/type.md86
-rw-r--r--docs/img/taped-hlil.pngbin0 -> 53066 bytes
-rw-r--r--docs/img/types-view.pngbin0 -> 248754 bytes
6 files changed, 162 insertions, 104 deletions
diff --git a/docs/docs.css b/docs/docs.css
index 3b9a5329..1f369767 100644
--- a/docs/docs.css
+++ b/docs/docs.css
@@ -18,15 +18,16 @@ background: #6e6e6e !important;
color: #fff !important;
}
-a {
+a, a code {
color: #d73726;
}
-a:visited {
+a:visited, a:visited code {
color: #990000;
}
-a:hover {
+
+a:hover, a:hover code {
color: #ff8080;
}
@@ -91,49 +92,45 @@ color: #ccc;
color: #fff;
}
-#light-slider {
+#image-slider {
background-color: #000;
}
-#light-slider li, #light-slider img {
- list-style: none;
-}
-
.lslide {
margin: 0px !important;
text-align: center;
}
-.cS-hidden {
+.hiddenc {
height: 1px;
opacity: 0;
filter: alpha(opacity=0);
overflow: hidden;
}
-ol#taped li#currentline {
+ol#inline-slides-text li#currentline {
background-color: #6e6e6e;
color: #fff;
font-weight: bold;
}
-ol#taped li {
+ol#inline-slides-text li {
list-style-position: inside;
}
@media screen and (max-width: 1020px) {
- .inline-slides {
+ div[class^="inline-slides"] {
flex-wrap: wrap;
}
}
-.inline-slides {
+div[class^="inline-slides"] {
display: flex;
align-items: center;
justify-content: space-between;
}
-.inline-slides > #light-slider-container {
+div[class^="inline-slides"] > div[id^="image-slider-container"]{
margin-left: 10px;
flex-shrink: 1;
}
diff --git a/docs/getting-started.md b/docs/getting-started.md
index 01f9fff0..afe8cb64 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -55,12 +55,12 @@ You can load files in many ways:
![open with options >](img/open-with-options.png "Open with Options")
1. Drag-and-drop a file onto the Binary Ninja window
-2. Use the `File/Open` menu or `Open` button on the start screen (`CMD-o` or `CTL-o`)
-3. Use the `File/Open with Options` menu which allows you to customize the analysis options (`CMD-SHIFT-o` or `CTL-SHIFT-o`)
+2. Use the `File/Open` menu or `Open` button on the start screen (`[CMD/CTRL] o`)
+3. Use the `File/Open with Options` menu which allows you to customize the analysis options (`[CMD/CTRL-SHIFT] o`)
4. Open a file from the Triage picker (`File/Open for Triage`) which enables several minimal analysis options and shows a summary view first
-5. Click an item in the recent files list (hold `CMD`/`CTL` and `SHIFT` while clicking to use the `Open with Options` workflow)
+5. Click an item in the recent files list (hold `[CMD/CTRL-SHIFT]` while clicking to use the `Open with Options` workflow)
6. Run Binary Ninja with an optional command-line parameter
-7. Open a file from a URL via the `CMD-l` or `CTRL-l` hot key
+7. Open a file from a URL via the `[CMD/CTRL] l` hot key
8. Open a file using the `binaryninja:` URL handler. For security reasons, the URL handler requires you to confirm a warning before opening a file via the URL handler. URLs additionally support deep linking using the `expr` query parameter where expression value is a valid parsable expression such as those possible in the [navigation dialog](#navigating), and fully documented in the [`parse_expression`](https://api.binary.ninja/binaryninja.binaryview-module.html?highlight=parse_expression#binaryninja.binaryview.BinaryView.parse_expression) API. Below a few examples are provided:
* URLs For referencing files on the local file system.
* `binaryninja:///bin/ls?expr=sub_2830` - open the given file and navigate to the function: `sub_2830`
@@ -104,13 +104,13 @@ Switching views happens multiple ways. In some instances, it is automatic (click
One great feature for quickly navigating through a variety of options and actions is the `command palette`. Inspired by similar features in [Sublime](http://docs.sublimetext.info/en/latest/reference/command_palette.html), and [VS Code](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette), the command-palette is a front end into an application-wide, context-sensitve action system that all actions, plugins, and hotekys in the system are routed through.
-To trigger it, simply use the `CMD-p` or `CTRL-p` hot key. Note that the command-palette is context-sensitive and therefore some actions (for example, `Display as - Binary`) may only be available depending on your current view or selection. This is also available to plugins. For example, a plugin may use [PluginCommand.register](https://api.binary.ninja/binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register) with the optional `is_valid` callback to determine whether the action should be available.
+To trigger it, simply use the `[CMD/CTRL] p` hot key. Note that the command-palette is context-sensitive and therefore some actions (for example, `Display as - Binary`) may only be available depending on your current view or selection. This is also available to plugins. For example, a plugin may use [PluginCommand.register](https://api.binary.ninja/binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register) with the optional `is_valid` callback to determine whether the action should be available.
### Custom Hotkeys
![keybindings](img/keybindings.png "Keybindings")
-Any action in the [action system](#command-palette) can have a custom hot key mapped to it. To access the keybindings menu, use the `CMD-SHIFT-p` or `CTRL-SHIFT-p` hot key, via the `Edit / Keybindings...` menu, or the `Keybindings` [command palette](#commnad-palette) entry.
+Any action in the [action system](#command-palette) can have a custom hot key mapped to it. To access the keybindings menu, use the `[CMD/CTRL-SHIFT] b` hot key, via the `Edit / Keybindings...` menu, or the `Keybindings` [command palette](#command-palette) entry.
Note
!!! Tip "Note"
@@ -327,7 +327,7 @@ Binary Ninja supports loading PDB files through a built in PDB loader. When sele
## Settings
-Settings are available via the `CMD-,` or `CTRL-,` hot key and allow a wide variety of customization.
+Settings are available via the `[CMD/CTRL] ,` hot key and allow a wide variety of customization.
All settings are saved in the [_user_ directory](#user-folder) in the file `settings.json`. Each top level object in this file is represents a different plugin or logical group.
@@ -343,74 +343,79 @@ Here's a list of all settings currently available from the UI:
|Category|Setting|Description|Type|Default|Key|
|---|---|---|---|---|---|
-|analysis|Disallow Branch to String|Enable the ability to halt analysis of branch targets that fall within a string reference. This setting is experimental and may be useful for malformed binaries.|`boolean`|`False`|<a name='analysis.conservative.disallowBranchToString'>analysis.conservative.disallowBranchToString</a>|
-|analysis|Always Analyze Indirect Branches|When using faster analysis modes, perform full analysis of functions containing indirect branches.|`boolean`|`True`|<a name='analysis.forceIndirectBranches'>analysis.forceIndirectBranches</a>|
-|analysis|Advanced Analysis Cache Size|Controls the number of functions for which the most recent generated advanced analysis is cached. Large values are may result in very high memory utilization.|`number`|`64`|<a name='analysis.limits.cacheSize'>analysis.limits.cacheSize</a>|
-|analysis|Max Function Analysis Time|Any functions that exceed this analysis time are deferred. Default value of 0 disables this feature. Time is specified in milliseconds.|`number`|`0`|<a name='analysis.limits.maxFunctionAnalysisTime'>analysis.limits.maxFunctionAnalysisTime</a>|
-|analysis|Max Function Size|Any functions over this size will not be automatically analyzed. A value of 0 disables analysis of functions and suppresses the related log warning. To override see FunctionAnalysisSkipOverride. Size is specified in bytes.|`number`|`65535`|<a name='analysis.limits.maxFunctionSize'>analysis.limits.maxFunctionSize</a>|
-|analysis|Max Function Update Count|Any functions that exceed this incremental update count are deferred. A value of 0 disables this feature.|`number`|`100`|<a name='analysis.limits.maxFunctionUpdateCount'>analysis.limits.maxFunctionUpdateCount</a>|
-|analysis|Minimum String Length|The minimum length for strings created during auto-analysis|`number`|`4`|<a name='analysis.limits.minStringLength'>analysis.limits.minStringLength</a>|
-|analysis|Worker Thread Count|The number of worker threads available for concurrent analysis activities.|`number`|`11`|<a name='analysis.limits.workerThreadCount'>analysis.limits.workerThreadCount</a>|
-|analysis|Autorun Linear Sweep|Automatically run linear sweep when opening a binary for analysis.|`boolean`|`True`|<a name='analysis.linearSweep.autorun'>analysis.linearSweep.autorun</a>|
-|analysis|Control Flow Graph Analysis|Enable the control flow graph analysis (Analysis Phase 3) portion of linear sweep.|`boolean`|`True`|<a name='analysis.linearSweep.controlFlowGraph'>analysis.linearSweep.controlFlowGraph</a>|
-|analysis|Detailed Linear Sweep Log Information|Linear sweep generates additional log information at the InfoLog level.|`boolean`|`False`|<a name='analysis.linearSweep.detailedLogInfo'>analysis.linearSweep.detailedLogInfo</a>|
-|analysis|Entropy Heuristics for Linear Sweep|Enable the application of entropy based heuristics to the function search space for linear sweep.|`boolean`|`True`|<a name='analysis.linearSweep.entropyHeuristics'>analysis.linearSweep.entropyHeuristics</a>|
-|analysis|Max Linear Sweep Work Queues|The number of binary regions under concurrent analysis.|`number`|`64`|<a name='analysis.linearSweep.maxWorkQueues'>analysis.linearSweep.maxWorkQueues</a>|
-|analysis|Analysis Mode|Controls the amount of analysis performed on functions.|`string`|`full`|<a name='analysis.mode'>analysis.mode</a>|
-|analysis|Tail Call Heuristics|Attempts to recover function starts that may be obscured by tail call optimization (TCO). Specifically, branch targets within a function are analyzed as potential function starts.|`boolean`|`True`|<a name='analysis.tailCallHeuristics'>analysis.tailCallHeuristics</a>|
-|analysis|Tail Call Translation|Performs tail call translation for jump instructions where the target is an existing function start.|`boolean`|`True`|<a name='analysis.tailCallTranslation'>analysis.tailCallTranslation</a>|
-|analysis|Unicode Blocks|Defines which unicode blocks to consider when searching for strings.|`array`|`[]`|<a name='analysis.unicode.blocks'>analysis.unicode.blocks</a>|
-|analysis|UTF-16 Encoding|Whether or not to consider UTF-16 code points when searching for strings.|`boolean`|`True`|<a name='analysis.unicode.utf16'>analysis.unicode.utf16</a>|
-|analysis|UTF-32 Encoding|Whether or not to consider UTF-32 code points when searching for strings.|`boolean`|`True`|<a name='analysis.unicode.utf32'>analysis.unicode.utf32</a>|
-|analysis|UTF-8 Encoding|Whether or not to consider UTF-8 code points when searching for strings.|`boolean`|`True`|<a name='analysis.unicode.utf8'>analysis.unicode.utf8</a>|
-|arch|x86 Disassembly Case|Specify the case for opcodes, operands, and registers.|`boolean`|`True`|<a name='arch.x86.disassembly.lowercase'>arch.x86.disassembly.lowercase</a>|
-|arch|x86 Disassembly Separator|Specify the token separator between operands.|`string`|`, `|<a name='arch.x86.disassembly.separator'>arch.x86.disassembly.separator</a>|
-|arch|x86 Disassembly Syntax|Specify disassembly syntax for the x86/x86_64 architectures.|`string`|`BN_INTEL`|<a name='arch.x86.disassembly.syntax'>arch.x86.disassembly.syntax</a>|
-|bnil-graph|Show Common ILs|Show common forms (non-SSA, non-mapped) in the output.|`boolean`|`True`|<a name='bnil-graph.showCommon'>bnil-graph.showCommon</a>|
-|bnil-graph|Include MMLIL|Show the MappedMediumLevelIL form in the output.|`boolean`|`False`|<a name='bnil-graph.showMapped'>bnil-graph.showMapped</a>|
-|bnil-graph|Include SSA|Include SSA forms in the output.|`boolean`|`True`|<a name='bnil-graph.showSSA'>bnil-graph.showSSA</a>|
-|downloadClient|HTTPS Proxy|Override default HTTPS proxy settings. By default, HTTPS Proxy settings are detected and used automatically via environment variables (e.g., https_proxy). Alternatively, proxy settings are obtained from the Internet Settings section of the Windows registry, or the Mac OS X System Configuration Framework.|`string`||<a name='downloadClient.httpsProxy'>downloadClient.httpsProxy</a>|
-|downloadClient|Download Provider|Specify the registered DownloadProvider which enables resource fetching over HTTPS.|`string`|`PythonDownloadProvider`|<a name='downloadClient.providerName'>downloadClient.providerName</a>|
-|format_string_finder|Should Enable Tests Plugin|Enable the tests plugin. Only for development.|`boolean`|`False`|<a name='format_string_finder.should_enable_tests_plugin'>format_string_finder.should_enable_tests_plugin</a>|
-|format_string_finder|Should Highlight Variable Trace|Highlight instructions that are used in the trace of the format parameter origin.|`boolean`|`False`|<a name='format_string_finder.should_highlight_variable_trace'>format_string_finder.should_highlight_variable_trace</a>|
-|pdb|Auto Download PDBs|Automatically download pdb files from specified symbol servers.|`boolean`|`True`|<a name='pdb.autoDownload'>pdb.autoDownload</a>|
-|pdb|Absolute PDB Symbol Store Path|Absolute path specifying where the PDB symbol store exists on this machine, overrides relative path.|`string`||<a name='pdb.localStoreAbsolute'>pdb.localStoreAbsolute</a>|
-|pdb|Relative PDB Symbol Store Path|Path *relative* to the binaryninja _user_ directory, specifying the pdb symbol store.|`string`|`symbols`|<a name='pdb.localStoreRelative'>pdb.localStoreRelative</a>|
-|pdb|Symbol Server List|List of servers to query for pdb symbols.|`array`|`['https://msdl.microsoft.com/download/symbols']`|<a name='pdb.symbolServerList'>pdb.symbolServerList</a>|
-|pluginManager|Community Plugin Manager Update Channel|Specify which community update channel the Plugin Manager should update plugins from.|`string`|`master`|<a name='pluginManager.communityUpdateChannel'>pluginManager.communityUpdateChannel</a>|
-|pluginManager|Official Plugin Manager Update Channel|Specify which official update channel the Plugin Manager should update plugins from.|`string`|`master`|<a name='pluginManager.officialUpdateChannel'>pluginManager.officialUpdateChannel</a>|
-|python|Python Interpreter|Python interpreter library(dylib/dll/so.1) to load if one is not already present when plugins are loaded.|`string`|`libpython2.7.dylib`|<a name='python.interpreter'>python.interpreter</a>|
-|triage|Triage Analysis Mode|Controls the amount of analysis performed on functions when opening for triage.|`string`|`basic`|<a name='triage.analysisMode'>triage.analysisMode</a>|
-|triage|Triage Shows Hidden Files|Whether the Triage file picker shows hidden files.|`boolean`|`False`|<a name='triage.hiddenFiles'>triage.hiddenFiles</a>|
-|triage|Triage Linear Sweep Mode|Controls the level of linear sweep performed when opening for triage.|`string`|`partial`|<a name='triage.linearSweep'>triage.linearSweep</a>|
-|triage|Always Prefer Triage Summary View|Always prefer opening binaries in Triage Summary view, even when performing full analysis.|`boolean`|`False`|<a name='triage.preferSummaryView'>triage.preferSummaryView</a>|
-|triage|Prefer Triage Summary View for Raw Files|Prefer opening raw files in Triage Summary view.|`boolean`|`False`|<a name='triage.preferSummaryViewForRaw'>triage.preferSummaryViewForRaw</a>|
-|ui|Color Blind|Choose colors that are visible to those with red/green color blindness.|`boolean`|`False`|<a name='ui.colorBlind'>ui.colorBlind</a>|
-|ui|Debug Mode|Enable developer debugging features (Additional views: Lifted IL, and IL SSA forms).|`boolean`|`False`|<a name='ui.debugMode'>ui.debugMode</a>|
-|ui|Feature Map|Enable the feature map which displays a visual overview of the BinaryView.|`boolean`|`True`|<a name='ui.featureMap.enable'>ui.featureMap.enable</a>|
-|ui|Feature Map File-Backed Only Mode|Exclude mapped regions that are not backed by a load file.|`boolean`|`False`|<a name='ui.featureMap.fileBackedOnly'>ui.featureMap.fileBackedOnly</a>|
-|ui|Antialiasing|Select font antialiasing style.|`string`|`subpixel`|<a name='ui.font.antialiasing'>ui.font.antialiasing</a>|
-|ui|Bold Fonts|Allow bold fonts.|`boolean`|`True`|<a name='ui.font.bold'>ui.font.bold</a>|
-|ui|Font Name|Font family selection.|`string`|`Source Code Pro`|<a name='ui.font.name'>ui.font.name</a>|
-|ui|Font Size|Font point size selection.|`number`|`12`|<a name='ui.font.size'>ui.font.size</a>|
-|ui|Line Spacing|Specify an additional distance between adjacent baselines.|`number`|`1`|<a name='ui.font.spacing'>ui.font.spacing</a>|
-|ui|Graph Carousel|Graphs and order of graphs to display for 'i' keystroke|`array`|`['Disassembly', 'LowLevelIL', 'MediumLevelIL']`|<a name='ui.graph.carousel'>ui.graph.carousel</a>|
-|ui|Default Disassembly Graph|Default disassembly graph to display on startup.|`string`|`Disassembly`|<a name='ui.graph.default'>ui.graph.default</a>|
-|ui|Number of history entries to store.|Controls the number of history entries to store for input dialogs.|`number`|`50`|<a name='ui.inputHistoryCount'>ui.inputHistoryCount</a>|
-|ui|Minimum UI Log Level|Set the minimum log level for the UI log.|`string`|`InfoLog`|<a name='ui.log.minLevel'>ui.log.minLevel</a>|
-|ui|Manual Tooltip|Enable to prevent tooltips from showing without &lt;ctrl&gt; being held.|`boolean`|`False`|<a name='ui.manualTooltip'>ui.manualTooltip</a>|
-|ui|Recent File Limit|Specify a limit for the recent file history.|`number`|`10`|<a name='ui.recentFileLimit'>ui.recentFileLimit</a>|
-|ui|Scripting Provider|Specify the registered ScriptingProvider for the default scripting console in the UI|`string`|`Python`|<a name='ui.scriptingProvider'>ui.scriptingProvider</a>|
-|ui|Display Settings Identifiers|Display setting identifiers in the UI settings view.|`boolean`|`False`|<a name='ui.settings.displayIdentifiers'>ui.settings.displayIdentifiers</a>|
-|ui|Theme|Customize the appearance and style of Binary Ninja.|`string`|`Dark`|<a name='ui.theme'>ui.theme</a>|
-|ui|TypeView Line Numbers|Controls the display of line numbers in the types view.|`boolean`|`True`|<a name='ui.view.types.lineNumbers'>ui.view.types.lineNumbers</a>|
-|updates|Active Content|Allow Binary Ninja to connect to the update server to check for updates and release notes.|`boolean`|`True`|<a name='updates.activeContent'>updates.activeContent</a>|
-|updates|Update Channel Preferences|Select update channel and version.|`string`|`None`|<a name='updates.channelPreferences'>updates.channelPreferences</a>|
-|updates|Show All Versions|Show all versions that are available for the current update channel in the UI.|`boolean`|`False`|<a name='updates.showAllVersions'>updates.showAllVersions</a>|
+|analysis|Disallow Branch to String|Enable the ability to halt analysis of branch targets that fall within a string reference. This setting may be useful for malformed binaries.|`boolean`|`False`|<a id='analysis.conservative.disallowBranchToString'>analysis.conservative.disallowBranchToString</a>|
+|analysis|Alternate Type Propagation|Enable an alternate approach for function type propagation. This setting is experimental and may be useful for some binaries.|`boolean`|`False`|<a id='analysis.experimental.alternateTypePropagation'>analysis.experimental.alternateTypePropagation</a>|
+|analysis|Always Analyze Indirect Branches|When using faster analysis modes, perform full analysis of functions containing indirect branches.|`boolean`|`True`|<a id='analysis.forceIndirectBranches'>analysis.forceIndirectBranches</a>|
+|analysis|Advanced Analysis Cache Size|Controls the number of functions for which the most recent generated advanced analysis is cached. Large values are may result in very high memory utilization.|`number`|`64`|<a id='analysis.limits.cacheSize'>analysis.limits.cacheSize</a>|
+|analysis|Max Function Analysis Time|Any functions that exceed this analysis time are deferred. A value of 0 disables this feature. The default value is 20 seconds. Time is specified in milliseconds.|`number`|`20000`|<a id='analysis.limits.maxFunctionAnalysisTime'>analysis.limits.maxFunctionAnalysisTime</a>|
+|analysis|Max Function Size|Any functions over this size will not be automatically analyzed. A value of 0 disables analysis of functions and suppresses the related log warning. To override see FunctionAnalysisSkipOverride. Size is specified in bytes.|`number`|`65536`|<a id='analysis.limits.maxFunctionSize'>analysis.limits.maxFunctionSize</a>|
+|analysis|Max Function Update Count|Any functions that exceed this incremental update count are deferred. A value of 0 disables this feature.|`number`|`100`|<a id='analysis.limits.maxFunctionUpdateCount'>analysis.limits.maxFunctionUpdateCount</a>|
+|analysis|Max Lookup Table Size|Limits the maximum number of entries for a lookup table.|`number`|`4095`|<a id='analysis.limits.maxLookupTableSize'>analysis.limits.maxLookupTableSize</a>|
+|analysis|Minimum String Length|The minimum length for strings created during auto-analysis|`number`|`4`|<a id='analysis.limits.minStringLength'>analysis.limits.minStringLength</a>|
+|analysis|Worker Thread Count|The number of worker threads available for concurrent analysis activities.|`number`|`11`|<a id='analysis.limits.workerThreadCount'>analysis.limits.workerThreadCount</a>|
+|analysis|Autorun Linear Sweep|Automatically run linear sweep when opening a binary for analysis.|`boolean`|`True`|<a id='analysis.linearSweep.autorun'>analysis.linearSweep.autorun</a>|
+|analysis|Control Flow Graph Analysis|Enable the control flow graph analysis (Analysis Phase 3) portion of linear sweep.|`boolean`|`True`|<a id='analysis.linearSweep.controlFlowGraph'>analysis.linearSweep.controlFlowGraph</a>|
+|analysis|Detailed Linear Sweep Log Information|Linear sweep generates additional log information at the InfoLog level.|`boolean`|`False`|<a id='analysis.linearSweep.detailedLogInfo'>analysis.linearSweep.detailedLogInfo</a>|
+|analysis|Entropy Heuristics for Linear Sweep|Enable the application of entropy based heuristics to the function search space for linear sweep.|`boolean`|`True`|<a id='analysis.linearSweep.entropyHeuristics'>analysis.linearSweep.entropyHeuristics</a>|
+|analysis|Max Linear Sweep Work Queues|The number of binary regions under concurrent analysis.|`number`|`64`|<a id='analysis.linearSweep.maxWorkQueues'>analysis.linearSweep.maxWorkQueues</a>|
+|analysis|Analysis Mode|Controls the amount of analysis performed on functions.|`string`|`full`|<a id='analysis.mode'>analysis.mode</a>|
+|analysis|Never Save Undo Data|Never save previous user actions to the database.|`boolean`|`False`|<a id='analysis.neverSaveUndoData'>analysis.neverSaveUndoData</a>|
+|analysis|Autorun Function Signature Matcher|Automatically run the function signature matcher when opening a binary for analysis.|`boolean`|`True`|<a id='analysis.signatureMatcher.autorun'>analysis.signatureMatcher.autorun</a>|
+|analysis|Auto Function Analysis Suppression|Enable suppressing analysis of automatically discovered functions.|`boolean`|`False`|<a id='analysis.suppressNewAutoFunctionAnalysis'>analysis.suppressNewAutoFunctionAnalysis</a>|
+|analysis|Tail Call Heuristics|Attempts to recover function starts that may be obscured by tail call optimization (TCO). Specifically, branch targets within a function are analyzed as potential function starts.|`boolean`|`True`|<a id='analysis.tailCallHeuristics'>analysis.tailCallHeuristics</a>|
+|analysis|Tail Call Translation|Performs tail call translation for jump instructions where the target is an existing function start.|`boolean`|`True`|<a id='analysis.tailCallTranslation'>analysis.tailCallTranslation</a>|
+|analysis|Unicode Blocks|Defines which unicode blocks to consider when searching for strings.|`array`|`[]`|<a id='analysis.unicode.blocks'>analysis.unicode.blocks</a>|
+|analysis|UTF-16 Encoding|Whether or not to consider UTF-16 code points when searching for strings.|`boolean`|`True`|<a id='analysis.unicode.utf16'>analysis.unicode.utf16</a>|
+|analysis|UTF-32 Encoding|Whether or not to consider UTF-32 code points when searching for strings.|`boolean`|`True`|<a id='analysis.unicode.utf32'>analysis.unicode.utf32</a>|
+|analysis|UTF-8 Encoding|Whether or not to consider UTF-8 code points when searching for strings.|`boolean`|`True`|<a id='analysis.unicode.utf8'>analysis.unicode.utf8</a>|
+|arch|x86 Disassembly Case|Specify the case for opcodes, operands, and registers.|`boolean`|`True`|<a id='arch.x86.disassembly.lowercase'>arch.x86.disassembly.lowercase</a>|
+|arch|x86 Disassembly Separator|Specify the token separator between operands.|`string`|`, `|<a id='arch.x86.disassembly.separator'>arch.x86.disassembly.separator</a>|
+|arch|x86 Disassembly Syntax|Specify disassembly syntax for the x86/x86_64 architectures.|`string`|`BN_INTEL`|<a id='arch.x86.disassembly.syntax'>arch.x86.disassembly.syntax</a>|
+|downloadClient|HTTPS Proxy|Override default HTTPS proxy settings. By default, HTTPS Proxy settings are detected and used automatically via environment variables (e.g., https_proxy). Alternatively, proxy settings are obtained from the Internet Settings section of the Windows registry, or the Mac OS X System Configuration Framework.|`string`||<a id='downloadClient.httpsProxy'>downloadClient.httpsProxy</a>|
+|downloadClient|Download Provider|Specify the registered DownloadProvider which enables resource fetching over HTTPS.|`string`|`PythonDownloadProvider`|<a id='downloadClient.providerName'>downloadClient.providerName</a>|
+|pdb|Auto Download PDBs|Automatically download pdb files from specified symbol servers.|`boolean`|`True`|<a id='pdb.autoDownload'>pdb.autoDownload</a>|
+|pdb|Absolute PDB Symbol Store Path|Absolute path specifying where the PDB symbol store exists on this machine, overrides relative path.|`string`||<a id='pdb.localStoreAbsolute'>pdb.localStoreAbsolute</a>|
+|pdb|Relative PDB Symbol Store Path|Path *relative* to the binaryninja _user_ directory, specifying the pdb symbol store.|`string`|`symbols`|<a id='pdb.localStoreRelative'>pdb.localStoreRelative</a>|
+|pdb|Symbol Server List|List of servers to query for pdb symbols.|`array`|`['https://msdl.microsoft.com/download/symbols']`|<a id='pdb.symbolServerList'>pdb.symbolServerList</a>|
+|pluginManager|Community Plugin Manager Update Channel|Specify which community update channel the Plugin Manager should update plugins from.|`string`|`master`|<a id='pluginManager.communityUpdateChannel'>pluginManager.communityUpdateChannel</a>|
+|pluginManager|Official Plugin Manager Update Channel|Specify which official update channel the Plugin Manager should update plugins from.|`string`|`master`|<a id='pluginManager.officialUpdateChannel'>pluginManager.officialUpdateChannel</a>|
+|python|Python Interpreter|Python interpreter library(dylib/dll/so.1) to load if one is not already present when plugins are loaded.|`string`|`libpython2.7.dylib`|<a id='python.interpreter'>python.interpreter</a>|
+|triage|Triage Analysis Mode|Controls the amount of analysis performed on functions when opening for triage.|`string`|`basic`|<a id='triage.analysisMode'>triage.analysisMode</a>|
+|triage|Triage Shows Hidden Files|Whether the Triage file picker shows hidden files.|`boolean`|`False`|<a id='triage.hiddenFiles'>triage.hiddenFiles</a>|
+|triage|Triage Linear Sweep Mode|Controls the level of linear sweep performed when opening for triage.|`string`|`partial`|<a id='triage.linearSweep'>triage.linearSweep</a>|
+|triage|Always Prefer Triage Summary View|Always prefer opening binaries in Triage Summary view, even when performing full analysis.|`boolean`|`False`|<a id='triage.preferSummaryView'>triage.preferSummaryView</a>|
+|triage|Prefer Triage Summary View for Raw Files|Prefer opening raw files in Triage Summary view.|`boolean`|`False`|<a id='triage.preferSummaryViewForRaw'>triage.preferSummaryViewForRaw</a>|
+|ui|Color Blind|Choose colors that are visible to those with red/green color blindness.|`boolean`|`False`|<a id='ui.colorBlind'>ui.colorBlind</a>|
+|ui|Debug Mode|Enable developer debugging features (Additional views: Lifted IL, and IL SSA forms).|`boolean`|`False`|<a id='ui.debugMode'>ui.debugMode</a>|
+|ui|Dock Window Title Bars|Enable to display title bars for dockable windows attached to a main window.|`boolean`|`True`|<a id='ui.docks.titleBars'>ui.docks.titleBars</a>|
+|ui|Feature Map Auto-Rotate|Automatically rotate the feature map orientation based on the current layout and dimensions.|`boolean`|`True`|<a id='ui.featureMap.autoRotate'>ui.featureMap.autoRotate</a>|
+|ui|Feature Map|Enable the feature map which displays a visual overview of the BinaryView.|`boolean`|`True`|<a id='ui.featureMap.enable'>ui.featureMap.enable</a>|
+|ui|Feature Map File-Backed Only Mode|Exclude mapped regions that are not backed by a load file.|`boolean`|`False`|<a id='ui.featureMap.fileBackedOnly'>ui.featureMap.fileBackedOnly</a>|
+|ui|Antialiasing|Select font antialiasing style.|`string`|`subpixel`|<a id='ui.font.antialiasing'>ui.font.antialiasing</a>|
+|ui|Bold Fonts|Allow bold fonts.|`boolean`|`True`|<a id='ui.font.bold'>ui.font.bold</a>|
+|ui|Font Name|Font family selection.|`string`|`Source Code Pro`|<a id='ui.font.name'>ui.font.name</a>|
+|ui|Font Size|Font point size selection.|`number`|`12`|<a id='ui.font.size'>ui.font.size</a>|
+|ui|Line Spacing|Specify an additional distance between adjacent baselines.|`number`|`1`|<a id='ui.font.spacing'>ui.font.spacing</a>|
+|ui|Graph Carousel|Graphs and order of graphs to display for 'i' keystroke|`array`|`['Disassembly', 'LowLevelIL', 'MediumLevelIL']`|<a id='ui.graph.carousel'>ui.graph.carousel</a>|
+|ui|Default Disassembly Graph|Default disassembly graph to display on startup.|`string`|`Disassembly`|<a id='ui.graph.default'>ui.graph.default</a>|
+|ui|Number of history entries to store.|Controls the number of history entries to store for input dialogs.|`number`|`50`|<a id='ui.inputHistoryCount'>ui.inputHistoryCount</a>|
+|ui|Minimum UI Log Level|Set the minimum log level for the UI log.|`string`|`InfoLog`|<a id='ui.log.minLevel'>ui.log.minLevel</a>|
+|ui|Manual Tooltip|Enable to prevent tooltips from showing without &lt;ctrl&gt; being held.|`boolean`|`False`|<a id='ui.manualTooltip'>ui.manualTooltip</a>|
+|ui|Recent File Limit|Specify a limit for the recent file history.|`number`|`10`|<a id='ui.recentFileLimit'>ui.recentFileLimit</a>|
+|ui|Scripting Provider|Specify the registered ScriptingProvider for the default scripting console in the UI|`string`|`Python`|<a id='ui.scriptingProvider'>ui.scriptingProvider</a>|
+|ui|Display Settings Identifiers|Display setting identifiers in the UI settings view.|`boolean`|`False`|<a id='ui.settings.displayIdentifiers'>ui.settings.displayIdentifiers</a>|
+|ui|Theme|Customize the appearance and style of Binary Ninja.|`string`|`Dark`|<a id='ui.theme'>ui.theme</a>|
+|ui|Gutter Width|Disassembly view gutter and tags width, in characters.|`number`|`5`|<a id='ui.view.disassembly.gutterWidth'>ui.view.disassembly.gutterWidth</a>|
+|ui|TypeView Line Numbers|Controls the display of line numbers in the types view.|`boolean`|`True`|<a id='ui.view.types.lineNumbers'>ui.view.types.lineNumbers</a>|
+|updates|Active Content|Allow Binary Ninja to connect to the update server to check for updates and release notes.|`boolean`|`True`|<a id='updates.activeContent'>updates.activeContent</a>|
+|updates|Update Channel Preferences|Select update channel and version.|`string`|`None`|<a id='updates.channelPreferences'>updates.channelPreferences</a>|
+|updates|Show All Versions|Show all versions that are available for the current update channel in the UI.|`boolean`|`False`|<a id='updates.showAllVersions'>updates.showAllVersions</a>|
+|user|Email|The email that will be shown when collaborating with other users.|`string`||<a id='user.email'>user.email</a>|
+|user|Name|The name that will be shown when collaborating with other users.|`string`||<a id='user.name'>user.name</a>|
## Updates
-Binary Ninja automatically updates itself by default. This functionality can be disabled in the `Update Channel` dialog (`CMD-p`/`CTL-p`, `Update Channel`, or under the `Preferences` sub menu available under `Edit` on Linux and Windows, and the Application menu on MacOS) preferences by turning off the `Update to latest version automatically` option.
+Binary Ninja automatically updates itself by default. This functionality can be disabled in the `Update Channel` dialog (`[CMD/CTRL] p`, `Update Channel`, or under the `Preferences` sub menu available under `Edit` on Linux and Windows, and the Application menu on MacOS) preferences by turning off the `Update to latest version automatically` option.
Updates are silently downloaded in the background and when complete an option to restart is displayed in the status bar. Whenever Binary Ninja restarts next, it will replace itself with the new version as it launches.
diff --git a/docs/guide/plugins.md b/docs/guide/plugins.md
index 22a56e95..ba7bed02 100644
--- a/docs/guide/plugins.md
+++ b/docs/guide/plugins.md
@@ -150,9 +150,9 @@ For the Personal edition, we recommend simply commenting out the `register_` fun
[angr]: https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/angr_plugin.py
[nampa]: https://github.com/kenoph/nampa
[installing the API]: https://github.com/Vector35/binaryninja-api/blob/dev/scripts/install_api.py
-[settings]: ../getting-started.html#ui.debugMode
-[python.interpreter setting]: ../getting-started.html#python.interpreter
+[settings]: ../getting-started.md#ui.debugMode
+[python.interpreter setting]: ../getting-started.md#python.interpreter
[interaction]: https://api.binary.ninja/binaryninja.interaction-module.html
[1]: https://github.com/Vector35/binaryninja-api/tree/dev/python/examples/kaitai
[2]: https://github.com/Vector35/binaryninja-api/tree/dev/python/examples/snippets
-[3]: https://github.com/Vector35/binaryninja-api/tree/dev/python/examples/triage \ No newline at end of file
+[3]: https://github.com/Vector35/binaryninja-api/tree/dev/python/examples/triage
diff --git a/docs/guide/type.md b/docs/guide/type.md
index f3f091d4..1ed3f59c 100644
--- a/docs/guide/type.md
+++ b/docs/guide/type.md
@@ -12,10 +12,10 @@ There are two main ways to interact with types from within a binary view. The fi
## Smart Structures Workflow
-New to stable version 1.3.2015 is the "Smart Structures" feature. Rather than manually create a type in the type view and then apply it to disassembly, you can create structures directly from disassembly using the `s` hotkey. Consider the following example (created using [taped](http://captf.com/2011/gits/taped) from the 2011 Ghost in the Shellcode CTF if you'd like to play along at home):
+New to [stable version 1.3.2015](https://binary.ninja/changelog/) is the "Smart Structures" feature. Rather than manually create a type in the type view and then apply it to disassembly, you can create structures directly from disassembly using the `s` hotkey. Consider the following example (created using [taped](http://captf.com/2011/gits/taped) from the 2011 Ghost in the Shellcode CTF if you'd like to play along at home):
<div class="inline-slides">
- <ol id="taped">
+ <ol id="inline-slides-text">
<li id="currentline">Assembly view of the start of <code>0x8048e20</code></li>
<li>MLIL view of the same basic block</li>
<li>MLIL view after selecting the return of <code>calloc</code> and pressing <code>s</code></li>
@@ -24,9 +24,8 @@ New to stable version 1.3.2015 is the "Smart Structures" feature. Rather than ma
<li>Viewing the structure automatically created after this workflow</li>
<li>Selecting the remaining bytes and turning them into an array using <code>1</code> to turn them all into uint_8 variables, and then <code>*</code> to turn them all into an array</li>
</ol>
-
- <div id="light-slider-container">
- <ul id="light-slider">
+ <div id="image-slider-container">
+ <ul id="image-slider">
<li>
<img src="../img/taped-1.png" alt="Structure Workflow 1"/>
</li>
@@ -52,15 +51,18 @@ New to stable version 1.3.2015 is the "Smart Structures" feature. Rather than ma
</div>
</div>
+_hover over the image to temporarily pause_
+
+
<script>
document.addEventListener("DOMContentLoaded", function(event) {
let pause = 3000;
- let slider = $("#light-slider");
+ let slider = $("#image-slider");
let sliderContainer = $(slider.selector + "-container");
window.slider = slider.lightSlider({
item:1,
loop: false,
- auto: false,
+ auto: true,
speed: 200,
pause: pause,
slideMargin: 0,
@@ -68,7 +70,7 @@ document.addEventListener("DOMContentLoaded", function(event) {
autoWidth:false,
thumbMargin:0,
onBeforeSlide: function (el) {
- Array.from($('ol#taped')[0].children).forEach(function(item, index, arr) {
+ Array.from($('ol#inline-slides-text')[0].children).forEach(function(item, index, arr) {
if (index == el.getCurrentSlideCount() - 1)
item.id = "currentline";
else
@@ -80,7 +82,7 @@ document.addEventListener("DOMContentLoaded", function(event) {
slider.find('img').each(function() {
$(this).parent().css("padding-top", (sliderHeight - this.naturalHeight)/2);
});
- slider.removeClass('cS-hidden');
+ slider.removeClass('hiddenc');
},
onAfterSlide: function(el) {
if (el.getCurrentSlideCount() == el.getTotalSlideCount()) {
@@ -95,7 +97,7 @@ document.addEventListener("DOMContentLoaded", function(event) {
sliderContainer.width(width);
},
});
- Array.from($('ol#taped')[0].children).forEach(function(item, index, arr) {
+ Array.from($('ol#inline-slides-text')[0].children).forEach(function(item, index, arr) {
item.addEventListener('click', function() { window.slider.goToSlide(index)});
});
});
@@ -103,7 +105,7 @@ document.addEventListener("DOMContentLoaded", function(event) {
Note that the last step is entirely optional. Now that we've created a basic structure, and if we happen to do a bit of reverse engineering we learn that this is actually a linked list and that the structure /should/ look like:
-```
+```C
struct Page
{
int num;
@@ -115,7 +117,7 @@ struct Page
```
Where tapes look like:
-```
+```C
struct Tape
{
int id;
@@ -124,12 +126,18 @@ struct Tape
};
```
-We can either update our automatically created structure by pressing `y` to change member types and `n` to change their names, or we can use the [types view](#types-view) to directly import the c code directly and then apply the types using `y`. That gives us a disassembly that looks like:
+![Taped HLIL >](../img/taped-hlil.png "Taped HLIL")
+
+We can either update our automatically created structure by pressing `y` to change member types and `n` to change their names, or we can use the [types view](#types-view) to directly import the c code directly and then apply the types using `y`. That gives us HLIL that now looks like:
## Types View
-To see all current types in a Binary View, use the types view. It can be accessed from the menu `View > Types`. Alternatively, you can access it with the `t` hotkey from most other views, or using `[cmd] p` to access the command-palette and typing "types". This is the most common interface for creating structures, unions and types using C-style syntax.
+To see all types in a Binary View, use the types view. It can be accessed from the menu `View > Types`. Alternatively, you can access it with the `t` hotkey from most other views, or using `[CMD/CTRL] p` to access the command-palette and typing "types". This is the most common interface for creating structures, unions and types using C-style syntax.
+
+For many built-in file formats you'll notice that common headers are already enumerated in the types view. These headers are applied when viewing the binary in [linear view](../getting-started.md#linear-view) and will show the parsed binary data into that structure or type making them particularly useful for binary parsing even of non-executable file formats.
+
+![Types View](../img/types-view.png "Types View")
### Shortcuts and Attributes
@@ -139,7 +147,7 @@ From within the Types view, you can use the following hotkeys to create new type
* `s` - Create new structure
* `i` - Create new type
-* `[shift] s` - Creating a new union
+* `[SHIFT] s` - Creating a new union
The shortcuts for editing existing elements are:
@@ -181,5 +189,53 @@ struct Header __packed
# Type Library
+_coming soon..._
# Signature Library
+
+While many signatures are [built-in](https://github.com/Vector35/binaryninja-api/issues/1551) and require no interaction to automatically match functions, you may wish to add or modify your own. First, install the [SigKit](https://github.com/Vector35/sigkit/) plugin from the [plugin manager](plugins.md#plugin-manager).
+
+## Running the signature matcher
+
+The signature matcher runs automatically by default once analysis completes. You can turn this off in `Settings > Analysis > Autorun Function Signature Matcher` (or, [analysis.signatureMatcher.autorun](../getting-started.md#analysis.signatureMatcher.autorun) in Settings).
+
+You can also trigger the signature matcher to run from the menu `Tools > Run Analysis Module > Signature Matcher`.
+
+Once the signature matcher runs, it will print a brief report to the console detailing how many functions it matched and will rename matched functions. For example:
+
+```txt
+1 functions matched total, 0 name-only matches, 0 thunks resolved, 33 functions skipped because they were too small
+```
+
+## Generating signature libraries
+
+To generate a signature library for the currently-open binary, use `Tools > Signature Library > Generate Signature Library`. This will generate signatures for all functions in the binary that have a name attached to them. Note that functions with automatically-chosen names such as `sub_401000` will be skipped. Once it's generated, you'll be prompted where to save the resulting signature library.
+
+For headless users, you can generate signature libraries by using the sigkit API ([examples](https://github.com/Vector35/sigkit/tree/master/examples) and [documentation](https://github.com/Vector35/sigkit/blob/master/__init__.py#L46)). For more detailed information, see our blog post describing [signature generation](https://binary.ninja/2020/03/11/signature-libraries.html#signature-generation).
+
+If you are accessing the sigkit API through the Binary Ninja GUI and you've installed the sigkit plugin through the plugin manager, you will need to import sigkit under a different name:
+
+```python
+import Vector35_sigkit as sigkit
+```
+
+## Installing signature libraries
+
+Binary Ninja loads signature libraries from 2 locations:
+
+ - [$INSTALL_DIR](https://docs.binary.ninja/getting-started.html#binary-path)/signatures/$PLATFORM
+ - [$USER_DIR](https://docs.binary.ninja/getting-started.html#user-folder)/signatures/$PLATFORM
+
+**WARNING**: Always place your signature libraries in your user directory. The install path is wiped whenever Binary Ninja auto-updates. You can locate it with `Open Plugin Folder` in the command palette and navigate "up" a directory.
+
+Inside the signatures folder, each platform has its own folder for its set of signatures. For example, `windows-x86_64` and `linux-ppc32` are two sample platforms. When the signature matcher runs, it uses the signature libraries that are relevant to the current binary's platform. (You can check the platform of any binary you have open in the UI using the console and typing `bv.platform`)
+
+### Manipulating signature libraries
+
+You can edit signature libraries programmatically using the sigkit API. A very basic [example](https://github.com/Vector35/sigkit/blob/master/examples/convert_siglib.py) shows how to load and save signature libraries. Note that Binary Ninja only supports signatures in the `.sig` format; the other formats are for debugging. The easiest way to load and save signature libraries in this format are the [`sigkit.load_signature_library()`](https://github.com/Vector35/sigkit/blob/master/__init__.py) and [`sigkit.save_signature_library()`](https://github.com/Vector35/sigkit/blob/master/__init__.py) functions.
+
+To help debug and optimize your signature libraries in a Signature Explorer GUI by using `Tools > Signature Library > Explore Signature Library`. This GUI can be opened through the sigkit API using [`sigkit.signature_explorer()`](https://github.com/Vector35/sigkit/blob/master/__init__.py) and [`sigkit.explore_signature_library()`](https://github.com/Vector35/sigkit/blob/master/sigexplorer.py).
+
+For a text-based approach, you can also export your signature libraries to JSON using the Signature Explorer. Then, you can edit them in a text editor and convert them back to a .sig using the Signature Explorer afterwards. Of course, these conversions are also accessible through the API as the [`sigkit.sig_serialize_json`](https://github.com/Vector35/sigkit/blob/master/sig_serialize_json.py) module, which provides a pickle-like interface. Likewise, [`sigkit.sig_serialize_fb`](https://github.com/Vector35/sigkit/blob/master/sig_serialize_fb.py) provides serialization for the standard .sig format.
+
+
diff --git a/docs/img/taped-hlil.png b/docs/img/taped-hlil.png
new file mode 100644
index 00000000..861b7a47
--- /dev/null
+++ b/docs/img/taped-hlil.png
Binary files differ
diff --git a/docs/img/types-view.png b/docs/img/types-view.png
new file mode 100644
index 00000000..ed70c3f7
--- /dev/null
+++ b/docs/img/types-view.png
Binary files differ