diff --git a/docs/dev/annotation.md b/docs/dev/annotation.md index 36dfd80c74..817ef81675 100644 --- a/docs/dev/annotation.md +++ b/docs/dev/annotation.md @@ -550,7 +550,7 @@ There are now two different signature library systems: [SigKit](#sigkit-signatur ### SigKit Signature Libraries -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](../guide/plugins.md#plugin-manager). +While many signatures are built-in 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](../guide/plugins.md#plugin-manager). #### Running the signature matcher diff --git a/docs/dev/plugins.md b/docs/dev/plugins.md index 018529eebe..1fdd1f1c49 100644 --- a/docs/dev/plugins.md +++ b/docs/dev/plugins.md @@ -14,22 +14,45 @@ To start, we suggest you download the [sample plugin](https://github.com/Vector3 - For small scripts, you can include all the code inside `__init__.py`, though we recommend for larger scripts that `__init__.py` just act as an initializer and calls into functions organized appropriately in other files. - If you have python dependencies, create a [requirements.txt](https://pip.pypa.io/en/latest/cli/pip_freeze/) listing any python dependencies. +### Plugin Description Display + +Binary Ninja displays plugin descriptions differently depending on the contents of the `plugin.json` file. + +- If `longdescription` is **100 characters or longer**, the plugin manager displays the `longdescription`. +- If `longdescription` is **shorter than 100 characters**, the plugin manager instead displays the contents of the plugin repository's `README.md`. + +To have your full `README.md` displayed, set `longdescription` to an empty string. The key must still be present -- validation fails if it is missing entirely. The `README.md` is read from the commit your latest release tag points at, so editing it only takes effect after you cut a new release. + +### Images in README Files + +When you include images for preview in the plugin manager, be aware that animated gifs are not fully supported. They will be rendered as static images of the first frame. + +Additionally, all images should be included using FULL GitHub URLs as they will not render in the plugin manager without that. + +For example: + +```markdown +![](https://raw.githubusercontent.com/Vector35/6502/refs/heads/master/media/nes.png) +``` + ### Submitting to the Plugin Manager If your plugin was created as described above, there's only two steps to get it submitted to the plugin manager! -1. First, create a release either [manually](https://binary.ninja/2019/07/04/plugin-manager-2.0.html#5-create-a-release) or using our [release helper](https://github.com/Vector35/release_helper). -1. Next, just [file an issue](https://github.com/Vector35/community-plugins/issues/new/choose) letting us know about your plugin. +1. First, cut a release. The [sample plugin](https://github.com/Vector35/sample_plugin#cutting-a-release) includes a release workflow you can copy into your own repository unmodified as long as `plugin.json` is at the repository root. Run it with `Actions` / `Release` / `Run workflow`; it bumps `version` in `plugin.json`, commits and tags that commit, and creates the release from the tag. +2. Next, just [file an issue](https://github.com/Vector35/community-plugins/issues/new/choose) letting us know about your plugin. + +For future releases all you need to do is run the workflow again. -For future releases all you need to do is increment the version and create a new release. +[extensions.binary.ninja](https://extensions.binary.ninja) reads `plugin.json` from the commit the latest release tag points at, and the `version` field in that file is the only version it looks at -- tag names and release titles are never parsed. A release whose version the server already has is silently skipped, so if you cut a release manually, be sure to increment `version` in `plugin.json` yourself. ### Using Your Own Plugin Repository -The simplest way to run your own plugin repository using the new V2 plugin manager is to use the [mock server](https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/mock_extension_server.py) helper script (a copy is available offline as well in the install path, in the python exapmle scripts subfolder). +The simplest way to run your own plugin repository using the new V2 plugin manager is to use the [mock server](https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/mock_extension_server.py) helper script (a copy is available offline as well in the install path, in the python example scripts subfolder). -Once you've created your test repository, use the `pluginManager.unofficialName` and `pluginManager.unofficialUrl` settings to add your third-party repository. +Once you've created your test repository, add its URL to the [`pluginManager.unofficialUrls`](../guide/settings.md#pluginManager.unofficialUrls) setting, which accepts a list of third-party repository URLs. -The [`add_repository`](https://api.binary.ninja/binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.add_repository) API can also be used to add the repository, though it [may require manual creation of the repository folder](https://github.com/Vector35/binaryninja-api/issues/2987). +The [`add_repository`](https://api.binary.ninja/binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.add_repository) API can also be used to add the repository. ### Testing diff --git a/docs/guide/index.md b/docs/guide/index.md index 5db14de17c..5a05c9b43f 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -319,14 +319,6 @@ Additionally, middle-clicking (scroll-wheel clicking) items that can be double-c There's also [many](#using-the-keyboard) keyboard-based navigation options. -### Switching Views -![graph view](../img/view-choices.png "Different Views") - -Switching views happens multiple ways. In some instances, it is automatic, such as clicking a data reference from graph view. This will navigate to linear view as data is not shown in the graph view. While navigating, you can use the [view hotkeys](#default-hotkeys) to switch to a specific view at the same location as the current selection. Next you can use the [command palette](#command-palette). Additionally, the view menu in the header at the top of each pane can be used to change views without navigating to any given location. Finally, you can also use the `View` application menu. - -!!! Tip "Tip" - Any loaded `BinaryView` will show up in the upper-left of the main pane. You can switch between (for example), `ELF` and `Raw` to switch between multiple loaded [`BinaryView`s](../dev/concepts.md#binary-views). - ## The Sidebar ![the sidebar ><](../img/sidebars.png "The Sidebar"){ width = "800" } @@ -721,70 +713,6 @@ To search in the keybindings list, just click to make sure it's focused and star - `[CTRL-SHIFT] -` (Windows/Linux) : Graph view zoom out - Other hotkeys specifically for working with types are listed in the [type guide](types/type.md#direct-ui-manipulation) -## Graph View - -![graph view](../img/graphview.png "Graph View"){ width="800" } - -Binary Ninja offers a graph view that groups the basic blocks of disassembly into visually distinct blocks with edges showing control flow between them. - -Features of the graph view include: - -- Ability to double-click edges to quickly jump between locations -- Zoom (CTRL-mouse wheel) -- Zoom to Fit - Zooms out until the whole graph is visible (`w`) -- Zoom to Cursor - Zooms to 100% at the position of the cursor (`z`) -- Vertical Scrolling (Side scroll bar as well as mouse wheel) -- Horizontal Scrolling (Bottom scroll bar as well as SHIFT-mouse wheel) -- Individual highlighting of arguments, addresses, immediate values, types, etc. -- Full type signature of current function shown in an interactive header: - - Selecting elements in the header highlights them in the graph view - - Change type (`y`) and Rename (`n`) shortcuts work on elements in the header - - Reanalyze function button on left edge of the header -- Edge colors indicate whether the path is the true (green) or false (red) case of a conditional jump (a color-blind option in the preferences is useful for those with red-green color blindness) and blue for unconditional branches -- Context menu that can trigger some function-wide actions as well as some specific to the highlighted instruction (such as inverting branch logic or replacing a specific function with a NOP) - -For HLIL and pseudo-C, graph view renders the non-AST form: an `if` shows its condition alone, with the body in a separate block. [Linear view](#linear-view) renders the AST form, nesting bodies under the statement that contains them. See [AST and Non-AST Forms](../dev/bnil-hlil.md#ast-and-non-ast-forms) for the API implications. - -## View Options - -![options >](../img/options.png "View options"){ width="400" } - -Each of the views (Hex, Graph, Linear) have a variety of options configurable from the ☰ menu on the top right of the view pane. - -Current options include: - -- Hex (and Linear View where hex values are shown) - - Background highlight - - None - - Column - - Byte value - - Color highlight - - None - - ASCII and printable - - Modification - - Contrast - - Normal - - Medium - - Highlight -- Graph & Linear Views - - Expand Long Opcode - - Indent HLIL Function Body (HLIL only) - - Show Address - - Show Call Parameter Names (MLIL/HLIL only) - - Show Function Address - - Show Opcode Bytes - - Show Register Set Highlighting - - Show Type Casts (`[SHIFT+CMD/CTRL] + C`) - - Show Variable Types - - At Assignment (MLIL graph only) - - At Top of Function - - Single Function View - - Advanced - - Show All Expression Types (MLIL/HLIL only) - - Show IL Flag Usage (Lifted IL only) - - Show IL Opcodes - - Show Stack Pointer Value (LLIL only) - ## Triage Summary ![triage summary](../img/triagesummary.png "Triage Summary"){ width="800" } @@ -866,19 +794,123 @@ clickable to navigate to the virtual address. Strings can be double-clicked to navigate to them, and the table can be sorted or the list filtered by typing in the search box. -## Byte Overview +## Views -![byte overview](../img/byteoverview.png "Byte Overview"){ width="800" } +![views](../img/views.png "Views"){ width="400" } -The Byte Overview (or "Bytes" when selected in the view switcher) shows the binary (mapped or raw, depending on the -top-level selection) as a [Code Page 437](https://en.wikipedia.org/wiki/Code_page_437) view. This view is commonly used -by malware analysis researchers using the [Hiew](http://hiew.ru) tool. +Switching views happens multiple ways. In some instances, it is automatic, such as clicking a data reference from graph view. This will navigate to linear view as data is not shown in the graph view. While navigating, you can use the [view hotkeys](#default-hotkeys) to switch to a specific view at the same location as the current selection. Next you can use the [command palette](#command-palette). Additionally, the view menu in the header at the top of each pane can be used to change views without navigating to any given location. Finally, you can also use the `View` application menu. -While this view is less feature-rich than the Hex view, it allows for a much higher information density as every byte is -represented by one character as opposed to four total characters when in Hex view (including the space between hex -digits and the ASCII representation). +!!! Tip "Tip" + Any loaded `BinaryView` will show up in the upper-left of the main pane. You can switch between (for example), `ELF` and `Raw` to switch between multiple loaded [`BinaryView`s](../dev/concepts.md#binary-views). + +### View Options -## Hex View +![options >](../img/options.png "View options"){ width="400" } + +Each view provides options for customizing how information is displayed. View options can be accessed from the ☰ menu in the top-right corner of the view pane. + +#### Hex View Options + +These options control the appearance of bytes and data displayed in Hex View. Some options are also available in Linear View when hex values are shown. + +* **Background Highlight** - Controls the background highlighting applied to displayed bytes: + * **None** - Disables background highlighting. + * **Column** - Highlights the column containing the selected byte. + * **Byte Value** - Highlights bytes based on their value. +* **Color Highlight** - Controls additional color highlighting applied to displayed bytes: + * **None** - Disables color highlighting. + * **ASCII and Printable** - Highlights printable ASCII characters. + * **Modification** - Highlights modified bytes. +* **Contrast** - Controls the contrast level used for highlighted bytes: + * **Normal** - Uses the default contrast level. + * **Medium** - Applies increased contrast. + * **High** - Applies the highest contrast level. + +#### Linear and Graph View Options + +These options control how information is displayed in Linear and Graph Views. + +* **Show Address** - Displays the memory address of each instruction in the view. +* **Show Function Address** - Displays the starting address next to a function's name in its header. +* **Show Opcode Bytes** - Displays each instruction's raw encoded bytes next to its disassembly. +* **Expand Long Opcode** - Opcode bytes longer than the architecture's display length (eight bytes on x86) are truncated unless this is enabled. +* **Show Register Set Highlighting** - When checked, clicking a register highlights every other instruction that reads or writes that same value of the register, so you can visually trace where it's used and where it's eventually overwritten. +* **Indent HLIL Function Body** (Linear view, HLIL only) - Indents the body of the function one level under its declaration. +* **Show Type Casts** - Displays explicit type casts in MLIL and HLIL views. +* **Single Function View** (Linear view only) - Restricts the view to the currently selected function. +* **Show Variable Types** - Variable types can be displayed in one of two locations: + * **At Top of Function** - Displays variable types at the beginning of the function. + * **At Assignment** (Graph view only) - Displays variable types at the point where they are assigned. +* **Address Display** - Controls the base the address is displayed relative to (absolute, or an offset from the file start, image base, segment, section, function, or a fixed base address you set), whether it's shown in decimal or hexadecimal, and whether a name is included alongside it. +* **Call Parameter Hints** - When a call target's parameter names are known, annotates each argument at the call site with that name: + * **Never Show Matching** - Only displays the name when it adds information beyond the default. + * **Always Show** - Displays the name on every call. + * **Never Show** - Turns parameter hints off entirely. +* **Block Labels** - Controls when a basic block's label is shown: + * **Never Show Default** - Hides the auto-generated default label but still displays any label you've manually renamed. + * **Always Show** - Shows every block's label. + * **Never Show** - Hides all block labels. +* **Render Layers** - Toggles independent visual overlays on the disassembly; more than one can be active at once, and which layers are available depends on context (e.g. an active debug session, WARP signatures loaded): + * Annotate Stack Offset - Adds a column showing the cumulative stack frame size at each instruction, marking (with \*) the instruction that changed it. + * TTD Coverage - Highlights instructions that were executed during a Time Travel Debugging trace. + * WARP Highlight Layer - Highlights bytes/instructions matched against a WARP function signature. +* **Advanced** - These options expose additional Intermediate Language information useful during advanced analysis. + * **Show IL Flag Usage** (Lifted IL only) - Displays flag usage in Lifted IL. + * **Show Stack Pointer Value** (LLIL only) - Displays the stack pointer value for each Low Level IL instruction. + * **Show All Expression Types** (MLIL/HLIL only) - Displays all available expression type information. + * **Show IL Opcodes** - Displays Intermediate Language opcode names. + +### Linear View + +![linear](../img/linear.png "Linear View"){ width="1000" } + +Linear view is a hybrid view between a graph-based disassembly window and the raw hex view. It lists the entire binary's memory in a linear fashion and is especially useful when trying to find sections of a binary that were not properly identified as code or even just examining data. + +Linear view is commonly used for identifying and adding type information for unknown data. To this end, as you scroll, you'll see data and code interspersed. Much like the graph view, you can turn on and off addresses via the command palette `Show Address` or the ☰ menu on the top right of the linear view pane. Many other [options](#view-options) are also available. + +For HLIL and pseudo-C, linear view renders the AST form: the body of an `if`, `while`, `for`, or `switch` is indented under the statement that contains it. [Graph view](#graph-view) renders the non-AST form, expressing that nesting through the edges between basic blocks instead. See [AST and Non-AST Forms](../dev/bnil-hlil.md#ast-and-non-ast-forms) for the API implications. + +#### High Level IL + +Binary Ninja features a decompiler that produces High Level IL (HLIL) as output. HLIL is not intended to be a representation of the code in C, but some users prefer to have a more C-like scoping style. + +You can control the way HLIL appears with the [`rendering.format.scopingStyle`](settings.md#rendering.format.scopingStyle) setting. + +The different options are shown below: + +![HLIL Scoping Display](../img/hlil-braces.png "HLIL Scoping Display"){ width="500" } + +#### Pseudo C + +![Pseudo C](../img/pseudo-c.png "Pseudo C View"){ width="800" } + +Binary Ninja offers an option to render the HLIL as a decompilation to "Pseudo C". This decompilation is intended to be more familiar to the user than the HLIL. It is not necessarily intended to be "compliant" C or even recompilable. In some cases, it may be possible to edit it into a form that a C compiler will accept, but the amount of effort required will vary widely, and no guarantee is made that it will be possible in all cases. + +### Graph View + +![graph view](../img/graphview.png "Graph View"){ width="800" } + +Binary Ninja offers a graph view that groups the basic blocks of disassembly into visually distinct blocks with edges showing control flow between them. + +Features of the graph view include: + +- Ability to double-click edges to quickly jump between locations +- Zoom (CTRL-mouse wheel) +- Zoom to Fit - Zooms out until the whole graph is visible (`w`) +- Zoom to Cursor - Zooms to 100% at the position of the cursor (`z`) +- Vertical Scrolling (Side scroll bar as well as mouse wheel) +- Horizontal Scrolling (Bottom scroll bar as well as SHIFT-mouse wheel) +- Individual highlighting of arguments, addresses, immediate values, types, etc. +- Full type signature of current function shown in an interactive header: + - Selecting elements in the header highlights them in the graph view + - Change type (`y`) and Rename (`n`) shortcuts work on elements in the header + - Reanalyze function button on left edge of the header +- Edge colors indicate whether the path is the true (green) or false (red) case of a conditional jump (a color-blind option in the preferences is useful for those with red-green color blindness) and blue for unconditional branches +- Context menu that can trigger some function-wide actions as well as some specific to the highlighted instruction (such as inverting branch logic or replacing a specific function with a NOP) + +For HLIL and pseudo-C, graph view renders the non-AST form: an `if` shows its condition alone, with the body in a separate block. [Linear view](#linear-view) renders the AST form, nesting bodies under the statement that contains them. See [AST and Non-AST Forms](../dev/bnil-hlil.md#ast-and-non-ast-forms) for the API implications. + +### Hex View ![hex](../img/hex.png "hex view"){ width="800" } @@ -888,19 +920,21 @@ The hex view is particularly good for transforming data in various ways via the If you're using the hex view for a Binary View like ELF, Mach-O or PE, you probably want to make sure you're also in the `Raw` view if you want to see the file as it exists on disk in hex view. -### Live Preview +#### Live Preview Any changes made in the Hex view will take effect immediately in any other views open into the same file (new views can be created via the `Split to new tab`, or `Split to new window` options under `View`, or via [splitting panes](#tiling-panes)). This can, however, cause large amounts of re-analysis so be warned before making large edits or transformations in a large binary file. -## Linear View - -![linear](../img/linear.png "Linear View"){ width="1000" } +### Byte Overview -Linear view is a hybrid view between a graph-based disassembly window and the raw hex view. It lists the entire binary's memory in a linear fashion and is especially useful when trying to find sections of a binary that were not properly identified as code or even just examining data. +![byte overview](../img/byteoverview.png "Byte Overview"){ width="800" } -Linear view is commonly used for identifying and adding type information for unknown data. To this end, as you scroll, you'll see data and code interspersed. Much like the graph view, you can turn on and off addresses via the command palette `Show Address` or the ☰ menu on the top right of the linear view pane. Many other [options](#view-options) are also available. +The Byte Overview (or "Bytes" when selected in the view switcher) shows the binary (mapped or raw, depending on the +top-level selection) as a [Code Page 437](https://en.wikipedia.org/wiki/Code_page_437) view. This view is commonly used +by malware analysis researchers using the [Hiew](http://hiew.ru) tool. -For HLIL and pseudo-C, linear view renders the AST form: the body of an `if`, `while`, `for`, or `switch` is indented under the statement that contains it. [Graph view](#graph-view) renders the non-AST form, expressing that nesting through the edges between basic blocks instead. See [AST and Non-AST Forms](../dev/bnil-hlil.md#ast-and-non-ast-forms) for the API implications. +While this view is less feature-rich than the Hex view, it allows for a much higher information density as every byte is +represented by one character as opposed to four total characters when in Hex view (including the space between hex +digits and the ASCII representation). ## Edit Function Properties Dialog @@ -966,24 +1000,6 @@ This element is a table containing a row for each register stack (e.g. x87) in t This dropdown selects the [function-level workflow](https://docs.binary.ninja/dev/workflows.html#workflow) which is used to analyze this function. -## High Level IL - -![HLIL Scoping Options >](../img/hlil-scope.png "HLIL Scoping Options"){ width="400" } - -Binary Ninja features a decompiler that produces High Level IL (HLIL) as output. HLIL is not intended to be a representation of the code in C, but some users prefer to have a more C-like scoping style. - -You can control the way HLIL appears in the settings. - -The different options are shown below: - -![HLIL Scoping Display](../img/hlil-braces.png "HLIL Scoping Display"){ width="500" } - -## Pseudo C - -![Pseudo C](../img/pseudo-c.png "Pseudo C View"){ width="800" } - -Binary Ninja offers an option to render the HLIL as a decompilation to "Pseudo C". This decompilation is intended to be more familiar to the user than the HLIL. It is not necessarily intended to be "compliant" C or even recompilable. In some cases, it may be possible to edit it into a form that a C compiler will accept, but the amount of effort required will vary widely, and no guarantee is made that it will be possible in all cases. - ## Dead Store Elimination Binary Ninja tries to be conservative with eliminating unused variables on the stack. When the analysis finds a variable that cannot be eliminated but does not appear to be used, the assignment will appear grayed out in the decompiler output. The first two lines of the function below show this: @@ -1130,14 +1146,23 @@ The interactive Python prompt also has several built-in "magic" functions and va - `current_function`: the current [`Function`](https://api.binary.ninja/binaryninja.function-module.html#binaryninja.function.Function) - `current_basic_block`: the current [`BasicBlock`](https://api.binary.ninja/binaryninja.basicblock-module.html#binaryninja.basicblock.BasicBlock) - `current_llil`: the current [`LowLevelILFunction`](https://api.binary.ninja/binaryninja.lowlevelil-module.html#binaryninja.lowlevelil.LowLevelILFunction) +- `current_llil_ssa`: the SSA form of `current_llil` +- `current_lifted_il`: the current function's Lifted IL - `current_mlil`: the current [`MediumLevelILFunction`](https://api.binary.ninja/binaryninja.mediumlevelil-module.html#binaryninja.mediumlevelil.MediumLevelILFunction) +- `current_mlil_ssa`: the SSA form of `current_mlil` +- `current_mapped_mlil`: the current function's mapped Medium Level IL +- `current_mapped_mlil_ssa`: the SSA form of `current_mapped_mlil` - `current_hlil`: the current [`HighLevelILFunction`](https://api.binary.ninja/binaryninja.highlevelil-module.html#binaryninja.highlevelil.HighLevelILFunction) +- `current_hlil_ssa`: the SSA form of `current_hlil` - `write_at_cursor(data)`: function that writes data to the start of the current selection - `get_selected_data()`: function that returns the data in the current selection - `current_il_index`: the current index of the IL instruction. It can be LLIL/MLIL/HLIL depending on which one is shown in the UI - `current_il_instruction`: the current IL instruction. It can be LLIL/MLIL/HLIL depending on which one is shown in the UI +- `current_il_instructions`: a generator over the IL instructions covered by the current selection (`None` if there is no valid selection) - `current_il_function`: the current IL function. It can be LLIL/MLIL/HLIL depending on which one is shown in the UI - `current_il_basic_block`: the current IL basic block. It can be LLIL/MLIL/HLIL depending on which one is shown in the UI +- `current_il_expr_index`: the expression index of the currently selected token (`None` if no token is selected) +- `current_il_expr`: the IL expression at `current_il_expr_index` - `current_token`: the current selected [`InstructionTextToken`](https://api.binary.ninja/binaryninja.architecture-module.html#binaryninja.architecture.InstructionTextToken) (`None` if no token is selected) - `current_data_var`: the current selected [`DataVariable`](https://api.binary.ninja/binaryninja.binaryview-module.html#binaryninja.binaryview.DataVariable) (`None` if no data variable is selected) - `current_sections`: the list of [`Section`](https://api.binary.ninja/binaryninja.binaryview-module.html#binaryninja.binaryview.Section)s that the current address is in (This list can be empty) @@ -1145,13 +1170,16 @@ The interactive Python prompt also has several built-in "magic" functions and va - `current_comment`: the comment at the current address. Writing to it sets comment at the current address - `current_symbol`: the [`Symbol`](https://api.binary.ninja/binaryninja.types-module.html#binaryninja.types.Symbol) at the current address (`None` if there is no symbol) - `current_symbols`: the list of [`Symbol`](https://api.binary.ninja/binaryninja.types-module.html#binaryninja.types.Symbol)s at the current address -- `current_var`: the current selected [`Variable`](https://api.binary.ninja/binaryninja.variable-module.html?highlight=variable#binaryninja.variable.Variable) in a function (Not to be confused with `current_data_var`) +- `current_variable`: the current selected [`Variable`](https://api.binary.ninja/binaryninja.variable-module.html?highlight=variable#binaryninja.variable.Variable) in a function (Not to be confused with `current_data_var`) +- `current_project`: the [`Project`](https://api.binary.ninja/binaryninja.project-module.html#binaryninja.project.Project) the current view belongs to (`None` if the file is not in a project) +- `current_thread`: the [`code.InteractiveConsole`](https://docs.python.org/3/library/code.html#code.InteractiveConsole) backing the scripting console - `current_ui_context`: the current [`UIContext`](https://api.binary.ninja/cpp/class_u_i_context.html) - `current_ui_view_frame`: the current [`ViewFrame`](https://api.binary.ninja/cpp/class_view_frame.html) - `current_ui_view`: the current [`View`](https://api.binary.ninja/cpp/class_view.html) - `current_ui_action_handler`: the current [`UIActionHandler`](https://api.binary.ninja/cpp/class_u_i_action_handler.html) - `current_ui_view_location`: the current [`ViewLocation`](https://api.binary.ninja/cpp/class_view_location.html) - `current_ui_action_context`: the current [`UIActionContext`](https://api.binary.ninja/cpp/struct_u_i_action_context.html) +- `current_ui_token_state`: the current token state from the UI action context, which backs `current_token` and `current_variable` ### startup.py @@ -1189,7 +1217,7 @@ See the [plugin development guide](../dev/plugins.md#debugging-using-other-ides) ## Using Plugins -Plugins can be installed by one of two methods. First, they can be installed via the Plugin Manager accessed via the `Plugins` / `Manage Plugins` menu or `[CMD/CTRL] m` hotkey. +Plugins can be installed by one of two methods. First, they can be installed via the Plugin Manager accessed via the `Plugins` / `Manage Plugins` menu or `[CMD/CTRL+SHIFT] m` hotkey. ![plugin manager](../img/plugin-manager.png "Plugin Manager"){ width="1000" } diff --git a/docs/guide/plugins.md b/docs/guide/plugins.md index 69c7ebaf6e..ce59948a68 100644 --- a/docs/guide/plugins.md +++ b/docs/guide/plugins.md @@ -25,8 +25,8 @@ Plugins can be installed directly via the GUI from Binary Ninja. You can launch Or: - - (Linux/Windows) `[CTRL-P]` / `Plugin Manager` / `[ENTER]` - - (macOS) `[CMD-P]` / `Plugin Manager` / `[ENTER]` + - (Linux/Windows) `[CTRL-P]` / `Manage Plugins` / `[ENTER]` + - (macOS) `[CMD-P]` / `Manage Plugins` / `[ENTER]` Note that some plugins may show `Force Install` instead of the normal `Install` button. If that's the case, it means the plugin does not specifically advertise support for your platform or version of python. Often times the plugin will still work, but you must override a warning to confirm installation and be aware that the plugin may not be compatible. diff --git a/docs/img/hlil-scope.png b/docs/img/hlil-scope.png deleted file mode 100644 index 62658ceaff..0000000000 Binary files a/docs/img/hlil-scope.png and /dev/null differ diff --git a/docs/img/options.png b/docs/img/options.png index ecd6e3ba75..f9d4e13e41 100644 Binary files a/docs/img/options.png and b/docs/img/options.png differ diff --git a/docs/img/view-choices.png b/docs/img/view-choices.png deleted file mode 100644 index 98aed16eab..0000000000 Binary files a/docs/img/view-choices.png and /dev/null differ diff --git a/docs/img/views.png b/docs/img/views.png new file mode 100644 index 0000000000..eb3ff548e7 Binary files /dev/null and b/docs/img/views.png differ