diff --git a/docs/guide/enterprise/index.md b/docs/guide/enterprise/index.md index 4f2e8bc23b..295260d015 100644 --- a/docs/guide/enterprise/index.md +++ b/docs/guide/enterprise/index.md @@ -104,7 +104,7 @@ Permissions can be set on *users* or *groups* of users. Available permissions ar * **Admin**: Lets the user or group modify the project permissions, in addition to edit permissions #### Server Area -Across the of the Remote Dialog are five buttons: +Across the top of the Remote Dialog are five buttons: * **Refresh**: Refreshes the projects and files shown from the currently active server. * **Connect**/**Disconnect**: Connects to (or disconnect from) an Enterprise server. If connecting, it will show the "Connect to Remote" window (see below). diff --git a/docs/guide/index.md b/docs/guide/index.md index bb51f6909d..884365b0f1 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -40,9 +40,9 @@ The contents of the user folder includes: The following files and folders may be created in the user folder but are not created by default without some additional action: - `keybindings.json`: Custom key bindings (see [key bindings](#custom-hotkeys)) -- `startup.py`: Default python commands run once the UI is loaded in the context of the scripting console +- `startup.py`: Default Python commands run once the UI is loaded in the context of the scripting console - `signatures/`: Any user-created signatures can be stored in platform-specific sub-folders in this location -- `pythonVER/`: Any pip dependencies from plugin manager plugins are installed to the appropriate python version subfolder such as `python310`, or `python311` +- `pythonVER/`: Any pip dependencies from plugin manager plugins are installed to the appropriate Python version subfolder such as `python310`, or `python311` - `symbols/`: Used to store automatically downloaded PDBs - `update/`: Used to store update caches for pending updates - `snippets/`: Used to store snippets created using the official Snippet plugin @@ -487,7 +487,7 @@ The following are only available when the cross-references pane is in focus: The Console panel by default only contains a single Python scripting console, however it is possible to create additional consoles using the `Create Python Console` command palette item. -For many more details about using the python console, see below in the [Python console documentation](#script-python-console). +For many more details about using the Python console, see below in the [Python console documentation](#script-python-console). ### Variables @@ -729,10 +729,10 @@ The Triage Summary view is intended to give a quick overview of a file. There is files for triage (`File/Open for Triage`) so a high level overview can be viewed before deciding whether to trigger a full analysis. If a file is opened in this way, a button at the bottom appears titled, "Start Full Analysis". -Triage Summary was originally a [python +Triage Summary was originally a [Python plugin](https://github.com/Vector35/binaryninja-api/tree/dev/python/examples/triage) implemented as a proof-of-concept for extending the UI. The functionality was so useful it was re-written in C++ and integrated into the official UI, -however the python plugin contains a feature that the C++ one does not: the ability to resolve some dynamic imports. To +however the Python plugin contains a feature that the C++ one does not: the ability to resolve some dynamic imports. To use this version, copy the folder linked above into your [plugins folder](#user-folder) and disable the built-in C++ UI using the [`corePlugins.triage`](settings.md#corePlugins.triage) setting. @@ -744,7 +744,7 @@ entropy map to navigate to that location in your default view. ### 2. File Info -File Info: The file info section contains some summary information for the file, each result can be clicked to copy +The file info section contains some summary information for the file, each result can be clicked to copy it into your clipboard. ### 3. Headers @@ -763,7 +763,7 @@ summary when the file doesn't specify a load address such as a raw or mapped fil switching the view in the upper-left from the `BinaryView` name to `raw` will force the BASE UI to show up in the Triage Summary. -See our recent [blog +See our [blog post](https://binary.ninja/2024/05/21/automatically-identifying-base-addresses.html) for more information on how BASE works. The following settings describe the advanced settings and how they influence the process. @@ -882,20 +882,24 @@ Pure functions are assumed to have no side effects and may be inlined if their r ### 8. Inline During Analysis -When Inline During Analysis is checked, it causes the function to be [inlined](https://api.binary.ninja/binaryninja.function-module.html#binaryninja.function.Function.inline_during_analysis) during analysis. +When Inline During Analysis is checked, it causes the function to be [inlined](https://api.binary.ninja/binaryninja.function-module.html#binaryninja.function.Function.inline_during_analysis) during analysis. The options control whether instruction addresses are preserved per function or per call site. -### 9. Clobbered Registers +### 9. Signature Table -This section contains the list of registers that this function clobbers; individual registers can be checked or unchecked. +This section contains the function's return value and parameters as an editable table with columns for index, type, name, source, and location. -### 10. Return Registers +### 10. Clobbered Registers -Return registers shows the list of registers that this function returns data in; individual registers can be checked or unchecked. +This section contains the list of registers that this function clobbers; individual registers can be checked or unchecked. -### 11. Register Stack Adjustments +### 11. Register Stacks This element is a table containing a row for each register stack (e.g. x87) in the architecture, with the ability to adjust how many registers are removed from each stack when the function returns. +### 12. Function Workflow + +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" } @@ -1038,7 +1042,7 @@ To trigger the console, either use ``, or use the `View`/`Python Conso When both the Script Console and the Log view are open, the title of both acts as a tab that can be dragged to either a tabbed view showing only one at a time (the default) or a split view showing both. Currently, the console and log views are part of a "Global Area", meaning they are always visible in the same position when switching between open binary tabs in the same window. This means they can only dock with each other, and not with the sidebar or the main pane view area. It is possible to open additional scripting consoles via the `Create Python Console` action in the [command palette](#command-palette), and these new consoles will appear as additional tabs in the topmost, leftmost tab in the global area. Note that `` will always focus the original main scripting console, and while any of the other created consoles can be closed (using the button that will appear when hovering over the right edge of its tab), the original one cannot be closed. -Multi-line input is possible just by doing what you'd normally do in python. If you leave a trailing `:` at the end of a line, the box will automatically turn into a multi-line edit box, complete with a command-history. To submit that multi-line input, use `-`. You can also force multi-line input with `-`. +Multi-line input is possible just by doing what you'd normally do in Python. If you leave a trailing `:` at the end of a line, the box will automatically turn into a multi-line edit box, complete with a command-history. To submit that multi-line input, use `-`. You can also force multi-line input with `-`. The scripting console is not a full IDE, but it has several convenience features that make it more pleasant to use: @@ -1047,11 +1051,11 @@ The scripting console is not a full IDE, but it has several convenience features - `` and `` can be used to view the command-history ???+ Tip "Tip" - All scripting consoles share a single python instance. This is an intentional design choice and has the following benefits: you can create variables in one tab/window and then access it in another. The downside is that if you run a long-running script for example, the console will still be blocked in other tabs and windows. This is a known trade-off and not expected to change. + All scripting consoles share a single Python instance. This is an intentional design choice and has the following benefits: you can create variables in one tab/window and then access it in another. The downside is that if you run a long-running script for example, the console will still be blocked in other tabs and windows. This is a known trade-off and not expected to change. ### Magic Console Variables -The interactive python prompt also has several built-in "magic" functions and variables. Some are read-only, and some are writable to provide convenient interactivity between the UI and console: +The interactive Python prompt also has several built-in "magic" functions and variables. Some are read-only, and some are writable to provide convenient interactivity between the UI and console: - `here` / `current_address`: address of the current selection. It's settable too and will navigate the UI if changed - `current_selection`: a tuple of the start and end addresses of the current selection. It's settable and will change the current selection @@ -1085,7 +1089,7 @@ The interactive python prompt also has several built-in "magic" functions and va ### startup.py -The python interpreter can be customized to run scripts on startup using `startup.py` in your user folder. Simply enter commands into that file, and they will be executed every time Binary Ninja starts. By default, it comes with an import helper: +The Python interpreter can be customized to run scripts on startup using `startup.py` in your user folder. Simply enter commands into that file, and they will be executed every time Binary Ninja starts. By default, it comes with an import helper: ```python # Commands in this file will be run in the interactive python console on startup @@ -1099,7 +1103,7 @@ From here, you can add any custom functions or objects you want to be available ???+ Danger "Warning" When you run commands in the scripting console, the UI will automatically update analysis. This is because quite often when you make a change in the console you expect it to be immediately reflected in the UI. The same is not true when running a script where you must trigger `bv.update_analysis_and_wait()` or `current_function.reanalyze()` to experience the same behavior. -The "Run Script..." option in the File Menu allows loading a python script from your filesystem and executing it +The "Run Script..." option in the File Menu allows loading a Python script from your filesystem and executing it within the console. It can also be run via the Command Palette or bound to a key. The script will have access to the same variables the Python console does, including the built-in special functions and @@ -1123,7 +1127,7 @@ Plugins can be installed by one of two methods. First, they can be installed via ![plugin manager](../img/plugin-manager.png "Plugin Manager"){ width="1000" } -Second, they can be manually installed by adding the plugin (either a `.py` file or a folder implementing a python module with a `__init__.py` file) to the appropriate path: +Second, they can be manually installed by adding the plugin (either a `.py` file or a folder implementing a Python module with a `__init__.py` file) to the appropriate path: - macOS: `~/Library/Application Support/Binary Ninja/plugins/` - Linux: `~/.binaryninja/plugins/` diff --git a/docs/guide/kernelcache.md b/docs/guide/kernelcache.md index 80423d7d92..96a5276984 100644 --- a/docs/guide/kernelcache.md +++ b/docs/guide/kernelcache.md @@ -1,7 +1,7 @@ # Kernel Cache Kernel Cache support in Binary Ninja provides you with tools to selectively load specific images, search for -specific symbols, and follow analysis references between any images loaded from an `kernelcache` in one view. +specific symbols, and follow analysis references between any images loaded from a `kernelcache` in one view. Our support for `kernelcache` is largely open source. The supporting code can be found in our public API repository [here](https://github.com/Vector35/binaryninja-api/tree/dev/view/kernelcache). Instructions for setting up your development environment and building plugins like this yourself can be found in our [Developer Guide](../dev/plugins.md#writing-native-plugins). Contributions are welcome! diff --git a/docs/guide/migration/ghidra/index.md b/docs/guide/migration/ghidra/index.md index 3e02ffc59c..752612c834 100644 --- a/docs/guide/migration/ghidra/index.md +++ b/docs/guide/migration/ghidra/index.md @@ -79,11 +79,11 @@ Binary Ninja's layout is also a bit different from what you're used to in Ghidra ![xref icon >](../../../img/xref-icon.png "Xref Icon") -The default behavior of cross-references to open in a tabbed reference UI element simila to how ghidra does it, however the `X` hotkey is used by default (and can be changed in the [keybindings UI](index.md#custom-hotkeys)). +The default behavior of cross-references to open in a tabbed reference UI element similar to how ghidra does it, however the `X` hotkey is used by default (and can be changed in the [keybindings UI](index.md#custom-hotkeys)). ### Theme -This doesn't exactly have to do with your layout, but it go a long way towards making the interface feel a bit more familiar. We have an expansive list of [community themes](https://github.com/Vector35/community-themes), and [a guide](../../../dev/themes.md) and a [blog post](https://binary.ninja/2021/07/08/creating-great-themes.html) on how to make your own. The built-in "Classic" theme should feel nostalgic, but if you're looking for a light theme that's slightly easier on the eyes, try out Summer or Solarized Light. +This doesn't exactly have to do with your layout, but it goes a long way towards making the interface feel a bit more familiar. We have an expansive list of [community themes](https://github.com/Vector35/community-themes), and [a guide](../../../dev/themes.md) and a [blog post](https://binary.ninja/2021/07/08/creating-great-themes.html) on how to make your own. The built-in "Classic" theme should feel nostalgic, but if you're looking for a light theme that's slightly easier on the eyes, try out Summer or Solarized Light. ### Feature Map diff --git a/docs/guide/migration/index.md b/docs/guide/migration/index.md index 032193886e..a01d99a2bd 100644 --- a/docs/guide/migration/index.md +++ b/docs/guide/migration/index.md @@ -1,10 +1,10 @@ # Migrating from Other Tools -Thank you for trying Binary Ninja! We know that it can be a bit different from what you're used to, so this page dedicated to getting you oriented in your new favorite decompiler! +Thank you for trying Binary Ninja! We know that it can be a bit different from what you're used to, so this page is dedicated to getting you oriented in your new favorite decompiler! If you haven't already installed Binary Ninja, you can follow our [installation guide](../../getting-started.md#installing-binary-ninja). -And be sure to check out some of our additional resource below before you click away! +And be sure to check out some of our additional resources below before you click away! We have quick start guides for the following: diff --git a/docs/guide/migration/migrationguideida.md b/docs/guide/migration/migrationguideida.md index b93cd5db95..772d03bead 100644 --- a/docs/guide/migration/migrationguideida.md +++ b/docs/guide/migration/migrationguideida.md @@ -50,7 +50,7 @@ Some major exceptions are: ![xref icon >](../../img/xref-icon.png "Xref Icon") -The hotkey for Cross-References in Binary Ninja will match your IDA muscle-memory, however the look is simlar to Ghidra with a pinned UI element containing tabs for references. To get the full IDA experience, change the [`ui.defaultXrefInterface`](../settings.md#ui.defaultXrefInterface) setting to `dialog`. +The hotkey for Cross-References in Binary Ninja will match your IDA muscle-memory, however the look is similar to Ghidra with a pinned UI element containing tabs for references. To get the full IDA experience, change the [`ui.defaultXrefInterface`](../settings.md#ui.defaultXrefInterface) setting to `dialog`. ![xref icon >](../../img/xref-setting.png "Xref Icon") diff --git a/docs/guide/plugins.md b/docs/guide/plugins.md index 57a8d8b6d5..c53c59036e 100644 --- a/docs/guide/plugins.md +++ b/docs/guide/plugins.md @@ -36,7 +36,7 @@ In addition to finding plugins by name or description content, the search box in - `@installed` to only show installed plugins - `@enabled` to only show enabled plugins - - `@disabled` to show plugins that are installed but not enabled) + - `@disabled` to show plugins that are installed but not enabled - `@update_available` to show plugins that have updates to install - `@failed_to_load` to show plugins that failed to load diff --git a/docs/guide/types/type.md b/docs/guide/types/type.md index c375433c86..b7259e199d 100644 --- a/docs/guide/types/type.md +++ b/docs/guide/types/type.md @@ -90,7 +90,7 @@ Here's a more detailed explanation about the various workflows: 1. In linear/graph view, if the selection is a variable that is not a structure, a dialog pops up and asks you to create a structure. You can specify the structure's name and size. There is also a checkbox that asks you whether the variable's type should be the structure itself or a pointer to the structure. 2. In linear/graph view, if the selection is a variable that is not a structure, and it happens to be the result of a memory allocation routine, e.g., `malloc`, a new structure will be created and its size is automatically determined (if possible). The variable's type will be a pointer to the structure. -3. In linear/graph/types view, If you select a variable whose type is a structure, or a pointer to a structure, BN will try to create all structure field at any offset that has been accessed in the code. +3. In linear/graph/types view, If you select a variable whose type is a structure, or a pointer to a structure, BN will try to create all structure fields at any offset that has been accessed in the code. 4. In linear/graph/types view, If you select a StructOffsetToken, BN will try to create a structure member at the current offset. The automatic member creation mentioned in #3 and #4 takes into consideration both incoming and outgoing type information for the accessed offsets and selects the most confident one as the type for the offset. diff --git a/docs/img/efp-dialog-diagram.png b/docs/img/efp-dialog-diagram.png index ebd8a96b36..cd7a5e3d34 100644 Binary files a/docs/img/efp-dialog-diagram.png and b/docs/img/efp-dialog-diagram.png differ