summaryrefslogtreecommitdiff
path: root/docs/guide
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2025-09-11 18:29:59 -0400
committerJosh Ferrell <josh@vector35.com>2025-09-11 19:09:28 -0400
commit5f21429815bfa13bc167aff4a9785424675b82b6 (patch)
treed13caac55b8ad269062929413e286bab44ad8429 /docs/guide
parent2d20ed145b9135a7d3390acb3ac10a900d947f91 (diff)
Docs grammar and spelling fixes
Diffstat (limited to 'docs/guide')
-rw-r--r--docs/guide/enterprise/index.md2
-rw-r--r--docs/guide/firmwareninja.md2
-rw-r--r--docs/guide/index.md74
-rw-r--r--docs/guide/migration/migrationguideghidra.md10
-rw-r--r--docs/guide/migration/migrationguideida.md8
-rw-r--r--docs/guide/sharedcache.md9
-rw-r--r--docs/guide/troubleshooting.md10
-rw-r--r--docs/guide/types/attributes.md26
-rw-r--r--docs/guide/types/basictypes.md4
-rw-r--r--docs/guide/types/cpp.md14
-rw-r--r--docs/guide/types/debuginfo.md10
-rw-r--r--docs/guide/types/index.md2
-rw-r--r--docs/guide/types/platformtypes.md8
-rw-r--r--docs/guide/types/type.md6
-rw-r--r--docs/guide/types/typeimportexport.md18
-rw-r--r--docs/guide/warp.md28
16 files changed, 115 insertions, 116 deletions
diff --git a/docs/guide/enterprise/index.md b/docs/guide/enterprise/index.md
index cb568434..4f2e8bc2 100644
--- a/docs/guide/enterprise/index.md
+++ b/docs/guide/enterprise/index.md
@@ -150,7 +150,7 @@ In any open file from a shared project, the Describe Changes Dialog will appear
![Describe Changes Dialog](../../img/enterprise/describe-changes.png){: style="max-width:335px; display: block; margin: auto;"}
### File Changelog
-The File Changelog can be accessed via `File/Collaboration/File Changelog...`. It shows a list of changes that have been made to the current file, along with what user made those changes, when, and a description of those changes. Items in this list are *sets* of changes (typically all of the changes before a user clicked the sync button), rather than every snapshot in the database.
+The File Changelog can be accessed via `File/Collaboration/File Changelog...`. It shows a list of changes that have been made to the current file, along with what user made those changes, when, and a description of those changes. Items in this list are *sets* of changes (typically all the changes before a user clicked the sync button), rather than every snapshot in the database.
![File Changelog](../../img/enterprise/file-changelog.png){: style="max-width:901px; display: block; margin: auto;"}
diff --git a/docs/guide/firmwareninja.md b/docs/guide/firmwareninja.md
index db49e99f..239ccb51 100644
--- a/docs/guide/firmwareninja.md
+++ b/docs/guide/firmwareninja.md
@@ -139,7 +139,7 @@ contained in the current project. To specify that the secondary entity is in an
If the current binary is not part of a Binary Ninja project, the `External File` button will be disabled, providing
only the option to define internal relationships.
-Click populated the cells in the `Primary` or `Secondary` columns to navigate between related items. If the related
+Click populated cells in the `Primary` or `Secondary` columns to navigate between related items. If the related
item is in an external bndb, the external bndb will be opened in a new tab and the UI will navigate to the location of
the item.
diff --git a/docs/guide/index.md b/docs/guide/index.md
index 1632e891..1d776968 100644
--- a/docs/guide/index.md
+++ b/docs/guide/index.md
@@ -16,7 +16,7 @@ Binaries are installed in the following locations by default:
- Windows (user install): `%LOCALAPPDATA%\Vector35\BinaryNinja`
???+ Tip "Tip"
- If you want a silent install on Windows, because we use the [NSIS](https://nsis.sourceforge.io/Docs/) installer, simply use: `BinaryNinjaInstaller.exe /S`
+ If you want a silent installation on Windows, because we use the [NSIS](https://nsis.sourceforge.io/Docs/) installer, simply use: `BinaryNinjaInstaller.exe /S`
???+ Danger "Warning"
Do not put any user content in the install-path of Binary Ninja. The auto-update process of Binary Ninja WILL remove any files included in these locations.
@@ -31,7 +31,7 @@ While the default user folders are listed below, you can override these paths on
The contents of the user folder includes:
-- `lastrun`: A text file containing the directory of the last Binary Ninja binary path -- very useful for plugins to resolve the install locations in non-default settings or on Linux
+- `lastrun`: A text file containing the directory of the last Binary Ninja binary path -- very useful for plugins to resolve the installation locations in non-default settings or on Linux
- `license.dat`: License file
- `plugins/`: Folder containing all manually installed user plugins
- `repositories/`: Folder containing files and plugins managed by the [Plugin Manager API](https://api.binary.ninja/binaryninja.pluginmanager-module.html)
@@ -55,7 +55,7 @@ The following files and folders may be created in the user folder but are not cr
Some settings such as window locations, saved checkboxes, recent file lists, disassembly settings, dialog histories are stored in `QSettings`. Note that the `BN_QSETTINGS_POSTFIX` environment variable can be used to temporarily use a different QSetting file which is useful for different profiles or testing purposes.
-If you ever have the need to flush these, you can find the install locations as described in the [QT documentation](https://doc.qt.io/qt-6/qsettings.html#platform-specific-notes).
+If you ever have the need to flush these, you can find the installation locations as described in the [QT documentation](https://doc.qt.io/qt-6/qsettings.html#platform-specific-notes).
## License
@@ -67,7 +67,7 @@ Once the license key is installed, you can change it, back it up, or otherwise i
## Linux Setup
-Because Linux install locations can vary widely, we do not assume that Binary Ninja has been installed in any particular folder on Linux. Rather, you can simply run `binaryninja/scripts/linux-setup.sh` after extracting the zip and various file associations, icons, and other settings will be set up. Run it with `-h` to see the customization options.
+Because Linux installation locations can vary widely, we do not assume that Binary Ninja has been installed in any particular folder on Linux. Rather, you can simply run `binaryninja/scripts/linux-setup.sh` after extracting the zip and various file associations, icons, and other settings will be set up. Run it with `-h` to see the customization options.
## Loading Files
@@ -99,7 +99,7 @@ There are five menu items that can be used to save some combination of a raw fil
### 1. Save
-This option is the only one bound to a hotkey by default and it is intended to be the "do what I probably want" option.
+This option is the only one bound to a hotkey by default, and it is intended to be the "do what I probably want" option.
- If you have edited the contents of a file and have not yet confirmed the file name to save over, this will ask you to save the file contents and prompt for a file name (check the save dialog title text to confirm this).
- If you have edited the file contents and _have_ previously specified the file name, this option will save those changes to that file without a prompt.
@@ -130,9 +130,9 @@ This menu allows for saving a `.bndb` without additional undo information, or by
## New Files
-When you create a new file, you're given the [hex view](index.md#hex-view) of an empty file. From here you can manually type in hexadecimal or ascii values, or paste in data in a variety of ways. To type in hex, make sure the left-side is focused, to type in ascii, just focus the right-side using the mouse or the "tab" key. The only way to enter a tab character into the ascii section is to enter "09" in the hex side.
+When you create a new file, you're given the [hex view](index.md#hex-view) of an empty file. From here you can manually type in hexadecimal or ASCII values, or paste in data in a variety of ways. To type in hex, make sure the left-side is focused, to type in ASCII, just focus the right-side using the mouse or the "tab" key. The only way to enter a tab character into the ASCII section is to enter "09" in the hex side.
-To paste, right click anywhere in the view, select "Paste From," and choose whichever option matches the data you copied. For example, the string `\x01\x02\x03\x04` can be pasted as an Escape String, while `01020304` is Raw Hex.
+To paste, right click anywhere in the view, select "Paste From", and choose whichever option matches the data you copied. For example, the string `\x01\x02\x03\x04` can be pasted as an Escape String, while `01020304` is Raw Hex.
From here, you can save the contents of your new binary to disk and reopen it for auto-analysis. Of course, you could also switch out of hex view into linear view and start creating functions directly.
@@ -161,13 +161,13 @@ The status of currently installed plugins will be displayed in the bottom right.
![plugin status ><](../img/plugin-status-widget.png "Plugin Status Widget"){ width="400" }
-Pressing each of the icons will navigate you to the the Plugin Manager with the corresponding filter:
+Pressing each of the icons will navigate you to the Plugin Manager with the corresponding filter:
- Green Circle: `@installed`
- Error Symbol: `@failed_to_load`
- Update Icon: `@update_available`
-Pressing the gear or using the hotkeys (macOS: `[CMD+SHIFT] + M` , Windows/Linux: `[CTRL+SHIFT] + M`) will open the plugin manager with no filters so you can browse available plugins.
+Pressing the gear or using the hotkeys (macOS: `[CMD+SHIFT] + M`, Windows/Linux: `[CTRL+SHIFT] + M`) will open the plugin manager with no filters, so you can browse available plugins.
### Commercial/Ultimate Features
@@ -227,7 +227,7 @@ There's also [many](#using-the-keyboard) keyboard-based navigation options.
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 [BinaryViews](../dev/concepts.md#binary-views).
+ 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
@@ -259,7 +259,7 @@ The Symbol List shows the following columns by default:
- `Name`: the [short name](https://api.binary.ninja/binaryninja.types-module.html#binaryninja.types.CoreSymbol) of the symbol (can be changed to the [raw name](https://api.binary.ninja/binaryninja.types-module.html#binaryninja.types.CoreSymbol) in the menu icon for the Symbol List)
- `Address`: the virtual address for the symbol
-- `Kind`: may be one of "Folder", Function", "Data", and "Bare Symbol"
+- `Kind`: may be one of "Folder", "Function", "Data", and "Bare Symbol"
- `Section`: the section of the binary the symbol appears in
Additionally, the following columns are hidden by default and can be enabled by right-clicking the header:
@@ -298,7 +298,7 @@ The Types View can be used as a sidebar panel or as a pane in the main view. The
![tags ><](../img/tags.png "Tags"){ width="600" }
-The tags panel allows you to both change existing tag categories, add your own categories, and also review any existing tags or bookmarks. Bookmarks are just tags with default hotkeys bound to them for both setting them and navigating them. The default keybinding to set a bookmark is `[CTRL-ALT] 1` through `[CTRL-ALT] 0` representing Bookmarks 1-10. The default hotkeys for navigating them are `[CTRL] 1` through `[CTRL] 0`. See the [keybindings](#custom-hotkeys) section for information on changing the default keybindings.
+The Tags panel allows you to change existing tag categories, add your own categories, and also review any existing tags or bookmarks. Bookmarks are just tags with default hotkeys bound to them for both setting them and navigating them. The default keybinding to set a bookmark is `[CTRL-ALT] 1` through `[CTRL-ALT] 0` representing Bookmarks 1-10. The default hotkeys for navigating them are `[CTRL] 1` through `[CTRL] 0`. See the [keybindings](#custom-hotkeys) section for information on changing the default keybindings.
### Memory Map
@@ -306,7 +306,7 @@ The tags panel allows you to both change existing tag categories, add your own c
The "Memory Map" pane and sidebar widget show segments and sections currently present in the binary, allows some modification of automatically added sections, and allows adding, modifying, and deleting user segments and sections.
-Double clicking an address in the "start" or "end" column will navigate in the address in the current view. If an address in the "Data Offset" column is double clicked, that address will always be navigated to in the `Raw` view which may be confusing at first.
+Double-clicking an address in the "start" or "end" column will navigate in the address in the current view. If an address in the "Data Offset" column is double-clicked, that address will always be navigated to in the `Raw` view which may be confusing at first.
![memory map icon <](../img/memory-map-icon.png "Memory Map Icon")
@@ -426,7 +426,7 @@ The Stack sidebar panel shows the currently selected function's stack layout. Yo
The History sidebar panel shows all annotations made during the history of a database. Note that even changes made prior to the introduction of the UI will be shown. This not only makes it easier to see what changes have been made, but allows you to right-click and revert to a particular point in analysis. Additionally, the right-click menu includes a toggle to hide or show the date of the change.
-Note that when plugins or the UI batch multiple changes in one action, they wil be summarized with a count of actions but no further details are possible.
+Note that when plugins or the UI batch multiple changes in one action, they will be summarized with a count of actions but no further details are possible.
There is currently no support for branching/forking style of history at this time.
@@ -457,7 +457,7 @@ The search types are available from a drop-down next to the text input field and
![Logs](../img/logs.png "Logs"){ width="700" }
-The log window lets you search and filter through logs. You can search by text or filter by loggers to identify messages of interest. By default, only the logs for a specific BinaryView that's open as well as any Global logs will show up but this setting can either be changed through the right-click menu or the drop down menu in the upper-right of the log window.
+The log window lets you search and filter through logs. You can search by text or filter by loggers to identify messages of interest. By default, only the logs for a specific `BinaryView` that's open as well as any Global logs will show up, but this setting can either be changed through the right-click menu or the drop-down menu in the upper-right of the log window.
### Hidden Sidebar Icons
@@ -538,7 +538,7 @@ To search in the keybindings list, just click to make sure it's focused and star
- `a` : Change the data type to an ASCII string
- `[SHIFT] a` : Change the data type to a `wchar_t` string
- `[OPT-SHIFT] a` (macOS) : Change the data type to a `wchar32_t` string
- - `[CTRL-SHIFT] a` (Windows/Linux) : Change the data type to a `wchar32_t` string
+ - `[CTRL-SHIFT] a` (Windows/Linux) : Change the data type to a `wchar32_t` string
- `1`, `2`, `4`, `8` : Change type directly to a data variable of the indicated widths
- `f` : Switch data variable between floating point types of varying precision
- `d` : Switch between data variables of various widths
@@ -632,7 +632,7 @@ using the [`corePlugins.triage`](settings.md#corePlugins.triage) setting.
### 1. Entropy
This image shows the overall entropy of the file. Brighter areas indicate regions of higher entropy
-(encrypted, compressed, etc), while darker regions indicate places of lower entropy. You can click anywhere in the
+(encrypted, compressed, etc.), while darker regions indicate places of lower entropy. You can click anywhere in the
entropy map to navigate to that location in your default view.
### 2. File Info
@@ -642,8 +642,8 @@ it into your clipboard.
### 3. Headers
-This section appears only in BinaryViews and the exact information depends on the view itself. PE headers
-are the most detailed and include such items as checksums, characterstics, and compiler strings. Addresses that
+This section appears only in `BinaryView`s and the exact information depends on the view itself. PE headers
+are the most detailed and include such items as checksums, characteristics, and compiler strings. Addresses that
existing in the virtual memory space of the file can be clicked to navigate to that location.
### 4. Base Address Detection (BASE)
@@ -652,8 +652,8 @@ existing in the virtual memory space of the file can be clicked to navigate to t
The Base Address Scan Engine (or BASE) is used to automatically identify load addresses for embedded files or
other formats where the load address isn't known and the file isn't relocatable. BASE is only visible in the triage
-summary when the file doesn't specify a load address such as a raw or mapped file. For BinaryViews like PE or MachO,
-switching the view in the upper-left from the BinaryView name to `raw` will force the BASE UI to show up in the
+summary when the file doesn't specify a load address such as a raw or mapped file. For `BinaryView`s like PE or Mach-O,
+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
@@ -692,7 +692,7 @@ clickable to navigate to the virtual address.
### 8. Strings
-Strings can be double clicked to navigate to them, and the table can be sorted or the list filtered by
+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
@@ -703,8 +703,8 @@ The Byte Overview (or "Bytes" when selected in the view switcher) shows the bina
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.
-While this view is less featureful than the Hex view, it allows for a much higher information density as every byte is
-represented by one character as opposted to four total characters when in Hex view (including the space between hex
+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).
## Hex View
@@ -829,7 +829,7 @@ is shown below:
![Expression Folding](../img/folding-before.png "Expression Folding"){ width="500" }
-Binary Ninja uses heuristics to determine if optimizatoins will improve readability, but sometimes it doesn't make the
+Binary Ninja uses heuristics to determine if optimizations will improve readability, but sometimes it doesn't make the
preferred choice. In the case above, you can override the heuristic by right-clicking the inner call expression and
choosing "Allow" or "Prevent" from the "Expression Folding" submenu.
@@ -858,7 +858,7 @@ this feature are shown in the table below:
## Merging and Splitting Variables
-Binary Ninja automatically splits all variables that the analysis determines to be safely splittable. This allows the user to assign different types to different uses of the same register or memory location. Sometimes, however, the code is more clear if two or more of these variables are merged together into a single variable.
+Binary Ninja automatically splits all variables that the analysis determines to be safely split. This allows the user to assign different types to different uses of the same register or memory location. Sometimes, however, the code is more clear if two or more of these variables are merged together into a single variable.
### Merge Variable Here
@@ -897,7 +897,7 @@ variable at a definition site and selecting "Split Variable at Definition" from
cases.
Manually split variables will initially provide the selected definition as a separate variable, and all other
-definitions will be automatically resolved into one or more other variables. If some of the definitions should
+definitions will be automatically resolved into one or more other variables. If some definitions should
have been included as part of the same variable, use "Merge Variables..." from the context menu after splitting
to select which of the other definitions should be merged.
@@ -961,14 +961,14 @@ The interactive python prompt also has several built-in "magic" functions and va
- `current_il_instruction`: the current IL instruction. It can be LLIL/MLIL/HLIL depending on which one is shown in the UI
- `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_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 the list can be empty
-- `current_segment`: the [`Segment`](https://api.binary.ninja/binaryninja.binaryview-module.html#binaryninja.binaryview.Segment) that the current address is in.
+- `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)
+- `current_segment`: the [`Segment`](https://api.binary.ninja/binaryninja.binaryview-module.html#binaryninja.binaryview.Segment) that the current address is in
- `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_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_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_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)
@@ -1027,8 +1027,8 @@ For more detailed information on using plugins, see the [plugin guide](plugins.m
Binary Ninja supports loading PDB files through a built-in PDB loader. It will automatically search for a corresponding PDB file whenever you load a Windows executable or library that was compiled with a PDB. The PDB loader will search a variety of places for PDBs, in the following order, if the files exist and match the GUID in the analyzed file:
1. Look in symbol servers defined in the `_NT_SYMBOL_PATH` environment variable, as defined by [Microsoft's documentation](https://learn.microsoft.com/en-us/windows/win32/debug/using-symsrv).
-2. Look for the file at the path specified in the loaded binary. E.g. when `C:\Users\foo\foo.exe` was compiled, it stored `C:\Users\foo\foo.pdb` as metadata inside `foo.exe`, so `C:\Users\foo\foo.pdb` will be loaded if it exists (and matches the guid).
-3. Look in the same directory as the opened file/bndb (e.g. If you have opened `C:\foo.exe` or `C:\foo.bndb`, the PDB plugin looks for `C:\foo.pdb`)
+2. Look for the file at the path specified in the loaded binary. E.g. when `C:\Users\foo\foo.exe` was compiled, it stored `C:\Users\foo\foo.pdb` as metadata inside `foo.exe`, so `C:\Users\foo\foo.pdb` will be loaded if it exists (and matches the GUID).
+3. Look in the same directory as the opened file/BNDB (e.g. If you have opened `C:\foo.exe` or `C:\foo.bndb`, the PDB plugin looks for `C:\foo.pdb`)
4. Look in the local symbol store. This is the directory specified by `pdb.files.localStoreAbsolute` in the settings, if it exists. Otherwise, this is a folder relative to the Binary Ninja user directory, specified by the `pdb.files.localStoreRelative` setting (and possibly the `BN_USER_DIRECTORY` environment variable). This directory has the structure `<symbol store>\foo.pdb\<guid>\foo.pdb`, equivalent to a regular symbol server.
5. Attempt to connect and download the PDB from the list of symbol servers specified in setting `pdb.files.symbolServerList`, in order.
@@ -1048,10 +1048,10 @@ The PDB loader comes with a couple configuration options which enable and disabl
## Launching Binary Ninja from the command line (CLI)
-When you launch Binary Ninja from the command-line, you can control whether or not a new window is launched or an existing window is used.
+When you launch Binary Ninja from the command-line, you can control whether a new window is launched or an existing window is used.
* Running Binary Ninja from the command line will try to find a running instance of the same version in which to open any files or URLs passed on the command line, or activate the main window if no arguments are provided.
-* For users whose workflow involves running Binary Ninja from a shell, just running `binaryninja` will try to activate a running instance, and if it does, return you to your shell. Otherwise it will launch a new instance of Binary Ninja.
+* For users whose workflow involves running Binary Ninja from a shell, just running `binaryninja` will try to activate a running instance, and if it does, return you to your shell. Otherwise, it will launch a new instance of Binary Ninja.
* Running `binaryninja` with a file path (or paths), like `binaryninja /bin/ls /bin/cat`, will
1. Try to activate and focus existing tabs for those files in a running instance, or failing that,
2. Try to open those files in new tabs in a running instance, or failing that,
diff --git a/docs/guide/migration/migrationguideghidra.md b/docs/guide/migration/migrationguideghidra.md
index 7867f0b5..55ccbd3e 100644
--- a/docs/guide/migration/migrationguideghidra.md
+++ b/docs/guide/migration/migrationguideghidra.md
@@ -6,9 +6,9 @@ Binary Ninja starts with the [New Tab Page](../index.md#new-tab) open. From here
## Decompiler Settings
-Binary Ninja likes to stay out of your way as much as possible, but sometimes you need to dig into the settings and change how a file is analyzed. If you have a file that can be opened with default settings, you won't get prompted for any additional input. Binary Ninja will automatically analyze the entire file — including running [linear sweep](https://binary.ninja/2017/11/06/architecture-agnostic-function-detection-in-binaries.html) — and provide you with linear decompilation for the whole file (like Ghidra's linear disassembly, but as decomp by default).
+Binary Ninja likes to stay out of your way as much as possible, but sometimes you need to dig into the settings and change how a file is analyzed. If you have a file that can be opened with default settings, you won't get prompted for any additional input. Binary Ninja will automatically analyze the entire file — including running [linear sweep](https://binary.ninja/2017/11/06/architecture-agnostic-function-detection-in-binaries.html) — and provide you with linear decompilation for the whole file (like Ghidra's linear disassembly, but as decompilation by default).
-If you're opening a [Universal Mach-O](https://en.wikipedia.org/wiki/Universal_binary), the Open with Options dialogue will appear so that you can choose which architecture to open (in the top right). If you have a default architecture you want to open whenever you open a universal binary, you can set your preference in a setting called [Universal Mach-O Architecture Preference](../settings.md#settings-reference). You'll also see the Open with Options dialogue when Binary Ninja is unable to recognize the file type or otherwise needs user input to analyze the file (can't find the entry point, needs you to provide some memory mappings, etc).
+If you're opening a [Universal Mach-O](https://en.wikipedia.org/wiki/Universal_binary), the Open with Options dialogue will appear so that you can choose which architecture to open (in the top right). If you have a default architecture you want to open whenever you open a universal binary, you can set your preference in a setting called [Universal Mach-O Architecture Preference](../settings.md#settings-reference). You'll also see the Open with Options dialogue when Binary Ninja is unable to recognize the file type or otherwise needs user input to analyze the file (can't find the entry point, needs you to provide some memory mappings, etc.).
It's worth digging into Binary Ninja's [settings](../settings.md) and seeing what's available to tune, but if you ever want to change a setting for a single binary, you can Open (it) with Options. Go to File -> Open with Options, and any settings you change will apply to only that file.
@@ -89,11 +89,11 @@ That said, I'll walk you through how to set up your sidebars to get it looking v
#### Program Tree
-But first, there are a couple caveats. Binary Ninja does not have an exact 1-to-1 widget for everything in Ghidra. The Program Tree is one of those elements; it's a little bit like our memory map, but it's also kinda not. Our new Binary Ninja layout assumes you've closed the program tree in Ghidra. Now Binary Ninja and Ghidra's sidebars are starting to match by having the symbols view on the top (which we start as a flat listing for you to organize into file yourself), and a different sidebar panel below it. Be sure to check out the options in the Symbols list's hamburger menu (the three lines in the top right).
+But first, there are a couple caveats. Binary Ninja does not have an exact 1-to-1 widget for everything in Ghidra. The Program Tree is one of those elements; it's a bit like our memory map, but it's also kinda not. Our new Binary Ninja layout assumes you've closed the program tree in Ghidra. Now Binary Ninja and Ghidra's sidebars are starting to match by having the symbols view on the top (which we start as a flat listing for you to organize into file yourself), and a different sidebar panel below it. Be sure to check out the options in the Symbols list's hamburger menu (the three lines in the top right).
#### Cross References and Types Manager
-We show cross references by default, but you can toggle that just by clicking it off on the left side under the divider line. If you want to match how Ghidra has it's types showing on the bottom, you can simply drag the types widget to beneath the divider line on the left side. Whenever you open your sidebar, both areas will open together. The Types sidebar also shows you the full type definition when you select a type.
+We show cross references by default, but you can toggle that just by clicking it off on the left side under the divider line. If you want to match how Ghidra has its types showing on the bottom, you can simply drag the types widget to beneath the divider line on the left side. Whenever you open your sidebar, both areas will open together. The Types sidebar also shows you the full type definition when you select a type.
#### Main Area
@@ -102,7 +102,7 @@ Time for the main event!
Ghidra shows you a linear view on the left, and single-function-at-a-time decompilation on the right. We already gave you linear decompilation of the whole Binary here by default, so there are three last things to do:
1. Create a new pane by pressing the icon in the top right that looks like a rectangle with a line through it. The two panes are now synced by address, as you’d expect.
-2. In the left pane, find the drop down that says "High Level IL", and switch down to disassembly. You should now have linear disassembly on the left, and linear decompilation on the right.
+2. In the left pane, find the dropdown that says "High Level IL", and switch down to disassembly. You should now have linear disassembly on the left, and linear decompilation on the right.
3. The final touch is to go back to the decompilation pane on the right and find the hamburger menu for that pane in the top right, and then select “Single Function View.”
Now the UI should be looking extremely familiar. Read our last couple of tips below, don't forget to use the command palette to find what you want to do, and you'll be off analyzing binaries in no time!
diff --git a/docs/guide/migration/migrationguideida.md b/docs/guide/migration/migrationguideida.md
index 0e3af279..029fef1b 100644
--- a/docs/guide/migration/migrationguideida.md
+++ b/docs/guide/migration/migrationguideida.md
@@ -6,9 +6,9 @@ Binary Ninja starts with the [New Tab Page](../index.md#new-tab) open. From here
## Decompiler Settings
-Binary Ninja likes to stay out of your way as much as possible, but sometimes you need to dig into the settings and change how a file is analyzed. If you have a file that can be opened with default settings, you won't get prompted for any additional input. Binary Ninja will automatically analyze the entire file — including running [linear sweep](https://binary.ninja/2017/11/06/architecture-agnostic-function-detection-in-binaries.html) — and provide you with linear decompilation for the whole file (like IDA's linear disassembly, but as decomp by default).
+Binary Ninja likes to stay out of your way as much as possible, but sometimes you need to dig into the settings and change how a file is analyzed. If you have a file that can be opened with default settings, you won't get prompted for any additional input. Binary Ninja will automatically analyze the entire file — including running [linear sweep](https://binary.ninja/2017/11/06/architecture-agnostic-function-detection-in-binaries.html) — and provide you with linear decompilation for the whole file (like IDA's linear disassembly, but as decompilation by default).
-If you're opening a [Universal Mach-O](https://en.wikipedia.org/wiki/Universal_binary), the Open with Options dialogue will appear so that you can choose which architecture to open (in the top right). If you have a default architecture you want to open whenever you open a universal binary, you can set your preference in a setting called [Universal Mach-O Architecture Preference](../settings.md#settings-reference). You'll also see the Open with Options dialogue when Binary Ninja is unable to recognize the file type or otherwise needs user input to analyze the file (can't find the entry point, needs you to provide some memory mappings, etc).
+If you're opening a [Universal Mach-O](https://en.wikipedia.org/wiki/Universal_binary), the Open with Options dialogue will appear so that you can choose which architecture to open (in the top right). If you have a default architecture you want to open whenever you open a universal binary, you can set your preference in a setting called [Universal Mach-O Architecture Preference](../settings.md#settings-reference). You'll also see the Open with Options dialogue when Binary Ninja is unable to recognize the file type or otherwise needs user input to analyze the file (can't find the entry point, needs you to provide some memory mappings, etc.).
It's worth digging into Binary Ninja's [settings](../settings.md) and seeing what's available to tune, but if you ever want to change a setting for a single binary, you can Open (it) with Options. Go to File -> Open with Options, and any settings you change will apply to only that file.
@@ -21,7 +21,7 @@ Importing IDA IDB (`.idb`) and TIL (`.til`) files into Binary Ninja allows you t
There are two ways through the UI to import IDB and TIL files:
-1. Prior to opening the binary, selecting _Open with Options_, allows you to set the IDB file you want to import with the _External Debug Info File_ setting (`analysis.debugInfo.external`).
+1. Prior to opening the binary, selecting _Open with Options_, allows you to set the IDB file you want to import with the _External Debug Info File_ setting (`analysis.debugInfo.external`).
2. After opening a binary, selecting _Import Debug Info from External File_ (`Analysis\\Import Debug Info from External File...`) allows you to apply IDB/TIL files after analysis has already started.
The following data will be imported:
@@ -31,7 +31,7 @@ The following data will be imported:
## Keybindings
-Most of the keybindings you're used to are the same. Any "actions" (renaming, setting types, opening cross-references, etc) you might want to perform can be found in the [command palette](../index.md#command-palette), which will save you from digging through unfamiliar right-click menus and help you learn any new keybindings. You can even [add your own actions](https://binary.ninja/2024/02/15/command-palette.html#how-do-i-register-actions-with-the-command-palette-myself) with ease. All actions can have their keybinding set, changed, or removed in the [keybindings menu](../index.md#default-hotkeys).
+Most of the keybindings you're used to are the same. Any "actions" (renaming, setting types, opening cross-references, etc.) you might want to perform can be found in the [command palette](../index.md#command-palette), which will save you from digging through unfamiliar right-click menus and help you learn any new keybindings. You can even [add your own actions](https://binary.ninja/2024/02/15/command-palette.html#how-do-i-register-actions-with-the-command-palette-myself) with ease. All actions can have their keybinding set, changed, or removed in the [keybindings menu](../index.md#default-hotkeys).
Some major exceptions are:
diff --git a/docs/guide/sharedcache.md b/docs/guide/sharedcache.md
index be253b1c..e3bb875b 100644
--- a/docs/guide/sharedcache.md
+++ b/docs/guide/sharedcache.md
@@ -1,9 +1,8 @@
# Shared Cache
-Shared 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 a `dyld_shared_cache` in one view.
+Shared 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 a `dyld_shared_cache` in one view.
-Our support for `dyld_shared_cache` is largely open source. The supporting code can can be found in our public API repository [here](https://github.com/Vector35/binaryninja-api/tree/dev/view/sharedcache). 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!
+Our support for `dyld_shared_cache` 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/sharedcache). 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!
## Support Matrix
@@ -80,7 +79,7 @@ opening a `dyld_shared_cache` and is how you add images to the actual binary vie
=== "Images"
Shows a list of all images within the `dyld_shared_cache` and their virtual addresses.
-
+
- Double click on an image to load
- Select image(s) and click button "Load Selected" to load multiple images at once
- Select image(s) and right click if you want more options for loading images
@@ -93,7 +92,7 @@ opening a `dyld_shared_cache` and is how you add images to the actual binary vie
- Double click on a symbol to load the associated image, or use the "Load Image" button
![Shared Cache Symbols](../img/dsc/triage-symbols.png "Shared Cache Symbols")
-
+
=== "Mappings & Regions"
Shows information about the entry mappings and the cache regions.
diff --git a/docs/guide/troubleshooting.md b/docs/guide/troubleshooting.md
index 392010e2..8ff63d89 100644
--- a/docs/guide/troubleshooting.md
+++ b/docs/guide/troubleshooting.md
@@ -9,7 +9,7 @@
We recommend the following steps to produce the best bug-reports:
-1. Try to reproduce your issue with both the latest stable release as well as [switching](index.md#updates) to the latest development branch.
+1. Try to reproduce your issue with both the latest stable release and [the latest development release](index.md#updates).
2. Try temporarily [disabling plugins](#disabling-plugins)
3. Try temporarily [disabling user settings](#disabling-user-settings)
4. Try temporarily [resetting QSettings](#resetting-qsettings)
@@ -25,9 +25,9 @@ In addition to the above-mentioned method of disabling user-plugins, you can als
### Resetting QSettings
-Some UI features rely on [QSettings](https://doc.qt.io/qt-6/qsettings.html#platform-specific-notes) to save state, window location, etc. You can temporarily reset your QSettings by setting the `BN_QSETTINGS_POSTFIX` environment variable which will cause Binary Ninja to use a different qsettings for that launch.
+Some UI features rely on [QSettings](https://doc.qt.io/qt-6/qsettings.html#platform-specific-notes) to save state, window location, etc. You can temporarily reset your QSettings by setting the `BN_QSETTINGS_POSTFIX` environment variable which will cause Binary Ninja to use a different QSettings for that launch.
-Removing the environment variable or running without it will revert to the default qsettings locations.
+Removing the environment variable or running without it will revert to the default QSettings locations.
### Extra logging
@@ -64,7 +64,7 @@ Binary Ninja will refuse to run as root on Linux and macOS platforms. You can wo
## API
- - If the GUI launches but the license file is not valid when launched from the command-line, check that you're using the right version of Python as only 64-bit Python 2.7, or 3.x versions are supported. Additionally, the [personal][purchase] edition does not support headless operation.
+ - If the GUI launches, but the license file is not valid when launched from the command-line, check that you're using the right version of Python as only 64-bit Python 3.x versions are supported. Additionally, the [personal][purchase] edition does not support headless operation.
## Database Issues
@@ -72,7 +72,7 @@ Binary Ninja will refuse to run as root on Linux and macOS platforms. You can wo
Binary Ninja currently uses SQLite for its analysis databases (`.bndb`), projects (`.bnpr`), and type archives (`.bnta`). This means it is only able to have a single instance of these open at any time.
-The message `Error while saving database snapshot: database is locked` means multiple copies are open at the same time. All instances will need to be closed and a new one opened to allow saving again (this includes syncing to an Enterprise server).
+The message `Error while saving database snapshot: database is locked` means multiple copies are open at the same time. All instances will need to be closed, and a new one opened to allow saving again (this includes syncing to an Enterprise server).
### Large File Size
diff --git a/docs/guide/types/attributes.md b/docs/guide/types/attributes.md
index 1796785d..b4453108 100644
--- a/docs/guide/types/attributes.md
+++ b/docs/guide/types/attributes.md
@@ -4,7 +4,7 @@ There are a number of custom attributes and annotations you can add to types in
## Structure Packing
-Use the attribute `__packed` in a structure definition to indicate that structure fields should be packed without padding. This is similar to `#pragma pack(1)` in MSVC and `__attribute__((packed))` in GCC/Clang.
+Use the attribute `__packed` in a structure definition to indicate that structure fields should be packed without padding. This is similar to `#pragma pack(1)` in MSVC and `__attribute__((packed))` in GCC/Clang.
### Examples
@@ -26,8 +26,8 @@ struct PackedHeader __packed
uint32_t version; /* Offset: 0xA */
void (* callback)(); /* Offset: 0xE */
};
-
-/* These also work, thanks to Clang's broad feature support across targets */
+
+/* These also work, thanks to Clang's broad feature support across targets */
struct __attribute__((packed)) Header
{
uint16_t size; /* Offset: 0x0 */
@@ -78,7 +78,7 @@ See [Working with C++ Types and Virtual Function Tables](cpp.md).
## Functions That Don't Return
-If you know that a function does not return (either via infinite loop, or terminating the process), you can annotate their definition with `__noreturn` to inform the analysis of this. Any calls to these functions will cause disassembly in the caller to stop, assuming execution does not continue.
+If you know that a function does not return (either via infinite loop, or terminating the process), you can annotate their definition with `__noreturn` to inform the analysis of this. Any calls to these functions will cause disassembly in the caller to stop, assuming execution does not continue.
### Examples
@@ -110,7 +110,7 @@ __convention("convention_name")
Due to the nature of parsing with Clang, most dedicated convention keywords are only available on their relevant targets. For example, `__stdcall` and `__fastcall` only apply to X86-based targets.
-If you have a custom calling convention, or one with no dedicated keyword, you can specify the convention name with the `__convention("name")` attribute.
+If you have a custom calling convention, or one with no dedicated keyword, you can specify the convention name with the `__convention("name")` attribute.
### Examples
@@ -164,14 +164,14 @@ int get_twice(int arg) __pure
}
int main()
{
- (void)get_twice(1); /* result is unused, this will be dead code eliminated */
+ (void)get_twice(1); /* result is unused, this will be dead code eliminated */
}
```
## Offset Pointers
Offset pointers, often called shifted pointers, relative pointers, or adjusted pointers, represent a pointer to a structure that has been offset by a certain number of bytes.
-Annotating these offset pointers allows Binary Ninja to deduce types for dereferences through them, find the structure's start, and render proper member names.
+Annotating these offset pointers allows Binary Ninja to deduce types for dereferences through them, find the structure's start, and render proper member names.
These are often seen in intrusive linked lists, where structures have a pointer to the next item in the list, but the pointer is offset from the base of the structure and
instead points to the member containing the pointer to the next item. Iterating through the items in the list involves following the pointer, then shifting the result by the offset
@@ -180,7 +180,7 @@ in any dereferences, and saving a couple instructions.
### Examples
-You will see uses of the offset pointers annotated with `(var - offset)` in IL views and `ADJ(var)` in Pseudo-C.
+You will see uses of the offset pointers annotated with `(var - offset)` in IL views and `ADJ(var)` in Pseudo-C.
``` C
/* High Level IL */
@@ -284,7 +284,7 @@ struct BaseClassDescriptor
};
/* ...results in the following presentation in Linear View */
-struct BaseClassDescriptor type_info::`RTTI Base Class Descriptor at (0,32,4,82)' =
+struct BaseClassDescriptor type_info::`RTTI Base Class Descriptor at (0,32,4,82)' =
{
struct TypeDescriptor* __ptr32 __based(start) pTypeDescriptor = class type_info `RTTI Type Descriptor' { 0x180000000 + 0x11180 }
uint32_t numContainedBases = 0x0
@@ -296,7 +296,7 @@ struct BaseClassDescriptor type_info::`RTTI Base Class Descriptor at (0,32,4,82)
}
```
-You can define structures who reference other structures relative to their variable address in memory. Address references are _relative to the pointer, not the base of the structure._
+You can define structures who reference other structures relative to their variable address in memory. Address references are _relative to the pointer, not the base of the structure._
``` C
/* This structure definition... */
@@ -314,7 +314,7 @@ struct Texture tile_red
{
uint32_t width = 128
uint32_t height = 128
- char* __based(var, 0x10) texNameOffset = string_tile_red { &tile_red->texNameOffset + 0x10 }
+ char* __based(var, 0x10) texNameOffset = string_tile_red { &tile_red->texNameOffset + 0x10 }
uint32_t mask = 0
uint32_t flags = 0
}
@@ -323,9 +323,9 @@ char string_tile_red[9] = "tile_red", 0;
## Pointers with Custom Sizes
-Some structures store pointers with a size different than the platform's address width. For example, a 32-bit image base-relative pointer used on an 64-bit architecture. These sized pointers can be annotated with the `__ptr8`, `__ptr16`, `__ptr32`, `__ptr64`, or `__ptr_width()` attributes.
+Some structures store pointers with a size different from the platform's address width. For example, a 32-bit image base-relative pointer used on an 64-bit architecture. These sized pointers can be annotated with the `__ptr8`, `__ptr16`, `__ptr32`, `__ptr64`, or `__ptr_width()` attributes.
-These are often combined with [Based Pointers](#based-pointers), since pointers smaller than the address width cannot point to parts of memory without being shifted first.
+These are often combined with [Based Pointers](#based-pointers), since pointers smaller than the address width cannot point to parts of memory without being shifted first.
### Examples
diff --git a/docs/guide/types/basictypes.md b/docs/guide/types/basictypes.md
index abebeafe..dcfd36f6 100644
--- a/docs/guide/types/basictypes.md
+++ b/docs/guide/types/basictypes.md
@@ -79,7 +79,7 @@ Types in the list have their class indicated by icons:
#### Type Containers
-All of the type containers described in the [type introduction](index.md) are available in the Types View along with `User Types` in a section of its own.
+All the type containers described in the [type introduction](index.md) are available in the Types View along with `User Types` in a section of its own.
* **User Types**: In your analysis: Types created by you, either manually or through actions/plugins
* **System Types**: In your analysis: Types created by analysis or imported during analysis, such as from Libraries or Debug Info
@@ -129,4 +129,4 @@ the name of a type will take you to its definition.
### Structure Offset Annotations
-The Types view annotates code references to structure offsets if a structure member is not present. These annotations use the same convention as in the graph/linear view, showing the offset position and width. For example, the `__offset(0x8).q` token means the code references the offset 0x8 bytes into this structure, and the size of the access is a qword (8 bytes). You can press S on an offset annotation and a structure member of the appropriate type will be created there. Additionally, if you right click the structure name, you can choose to create all of these references.
+The Types view annotates code references to structure offsets if a structure member is not present. These annotations use the same convention as in the graph/linear view, showing the offset position and width. For example, the `__offset(0x8).q` token means the code references the offset 0x8 bytes into this structure, and the size of the access is a qword (8 bytes). You can press S on an offset annotation and a structure member of the appropriate type will be created there. Additionally, if you right-click the structure name, you can choose to create all of these references.
diff --git a/docs/guide/types/cpp.md b/docs/guide/types/cpp.md
index 455e59fd..c803a926 100644
--- a/docs/guide/types/cpp.md
+++ b/docs/guide/types/cpp.md
@@ -398,13 +398,13 @@ Now, go to the data section and apply the virtual function table structures to t
virtual function tables themselves:
``` C
-00004020 struct vtable_for_Animal _vtable_for_Animal =
+00004020 struct vtable_for_Animal _vtable_for_Animal =
00004020 {
00004020 void (* make_sound)(struct Animal* this) = nullptr
00004028 void (* approach)(struct Animal* this) = Animal::approach()
00004030 }
-00004050 struct vtable_for_Flying _vtable_for_Flying =
+00004050 struct vtable_for_Flying _vtable_for_Flying =
00004050 {
00004050 void (* fly)(struct Flying* this) = Flying::fly
00004058 }
@@ -473,20 +473,20 @@ Apply the new virtual function table structures to the virtual function tables i
the data section:
``` C
-00004078 struct vtable_for_Dog _vtable_for_Dog =
+00004078 struct vtable_for_Dog _vtable_for_Dog =
00004078 {
00004078 void (* make_sound)(struct Animal* this) = Dog::make_sound()
00004080 void (* approach)(struct Animal* this) = Animal::approach()
00004088 }
-000040b0 struct vtable_for_Cat _vtable_for_Cat =
+000040b0 struct vtable_for_Cat _vtable_for_Cat =
000040b0 {
000040b0 void (* make_sound)(struct Animal* this) = Cat::make_sound
000040b8 void (* approach)(struct Animal* this) = Cat::approach()
000040c0 void (* nap)(struct Cat* this) = Cat::nap()
000040c8 }
-000040f0 struct vtable_for_Lion _vtable_for_Lion =
+000040f0 struct vtable_for_Lion _vtable_for_Lion =
000040f0 {
000040f0 void (* make_sound)(struct Animal* this) = Lion::make_sound
000040f8 void (* approach)(struct Animal* this) = Cat::approach()
@@ -543,13 +543,13 @@ Apply the virtual function table structures to the corresponding virtual functio
data section:
``` C
-00004130 struct vtable_for_Bird_as_Animal _vtable_for_Bird_as_Animal =
+00004130 struct vtable_for_Bird_as_Animal _vtable_for_Bird_as_Animal =
00004130 {
00004130 void (* make_sound)(struct Animal* this) = Bird::make_sound()
00004138 void (* approach)(struct Animal* this) = Bird::approach()
00004140 }
-00004150 struct vtable_for_Bird_as_Flying _vtable_for_Bird_as_Flying =
+00004150 struct vtable_for_Bird_as_Flying _vtable_for_Bird_as_Flying =
00004150 {
00004150 void (* fly)(struct Flying* this) = Flying::fly
00004158 }
diff --git a/docs/guide/types/debuginfo.md b/docs/guide/types/debuginfo.md
index 5468bb6c..501e0b67 100644
--- a/docs/guide/types/debuginfo.md
+++ b/docs/guide/types/debuginfo.md
@@ -1,8 +1,8 @@
# Debug Info
-Debug Info is a mechanism for importing types, function signatures, and data variables from either the original binary (eg. an ELF compiled with DWARF) or a supplemental file (eg. a PDB).
+Debug Info is a mechanism for importing types, function signatures, and data variables from either the original binary (e.g. an ELF compiled with DWARF) or a supplemental file (e.g. a PDB).
-Currently debug info plugins are limited to types, function signatures, and data variables, but in the future will include line number information, comments, local variables, and possibly more.
+Currently, debug info plugins are limited to types, function signatures, and data variables, but in the future will include line number information, comments, local variables, and possibly more.
## Supported Debug Info
@@ -10,7 +10,7 @@ We currently support [PDBs](https://github.com/Vector35/binaryninja-api/tree/dev
For PDBs, Binary Ninja will automatically try to source from specified local folders and Microsoft's symbol server ([see the PDB settings for more information](../settings.md#settings-reference)).
-DWARF supports information compiled in to ELF binaries, information from external ELF files (`.dwo`, `.debug`, etc), information compiled in to Mach-O's, and information from external `.dSYM` files as well. Support for DWARF information in PEs is [planned](https://github.com/Vector35/binaryninja-api/issues/1555).
+DWARF supports information compiled in to ELF binaries, information from external ELF files (`.dwo`, `.debug`, etc.), information compiled in to Mach-O's, and information from external `.dSYM` files as well. Support for DWARF information in PEs is [planned](https://github.com/Vector35/binaryninja-api/issues/1555).
## Applying Debug Info
@@ -34,13 +34,13 @@ DWARF information is imported from files that contain DWARF sections. Currently,
#### DWARF Import Limitations
-[DWARF version 5](https://dwarfstd.org/dwarf5std.html) is mostly backwards compatible with DWARF version 4, which we originally targetted with our DWARF import plugin, with the caveats descibed in [this issue](https://github.com/Vector35/binaryninja-api/issues/5423).
+[DWARF version 5](https://dwarfstd.org/dwarf5std.html) is mostly backwards compatible with DWARF version 4, which we originally targeted with our DWARF import plugin, with the caveats described in [this issue](https://github.com/Vector35/binaryninja-api/issues/5423).
Components are supported by the API, but not in the parser. The [same issue](https://github.com/Vector35/binaryninja-api/issues/5423) as above would also allow us to support components more easily as well.
#### DWARF Export Limitations
-Our [DWARF Export plugin](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/dwarf/dwarf_export) is also open source and uses a different system from our debug information import plugins. It also does not support function-local variable names or types. The export plugin currently will export the global variables, function prototypes, and all the types in your binary view except for ones that are FunctionTypeClass or VarArgsTypeClass.
+Our [DWARF Export plugin](https://github.com/Vector35/binaryninja-api/tree/dev/plugins/dwarf/dwarf_export) is also open source and uses a different system from our debug information import plugins. It also does not support function-local variable names or types. The export plugin currently will export the global variables, function prototypes, and all the types in your binary view except for ones that are `FunctionTypeClass` or `VarArgsTypeClass`.
#### Special Note for `.dSYM` Files
diff --git a/docs/guide/types/index.md b/docs/guide/types/index.md
index 7abcae64..375533af 100644
--- a/docs/guide/types/index.md
+++ b/docs/guide/types/index.md
@@ -10,7 +10,7 @@ There's so many things to learn about working with Types in Binary Ninja that we
Additionally, several types of containers for type information are documented here:
- [Debug Info](debuginfo.md): Debug Info can provide additional type information (examples include DWARF and PDB files)
-- [Type Libraries](typelibraries.md): Type Libraries contain types from commonly-used dynamic libraries
+- [Type Libraries](typelibraries.md): Type Libraries contain types from commonly-used dynamic libraries
- [Platform Types](platformtypes.md): Types that automatically apply to a platform
- [Type Archives](typearchives.md): How you can use type archives to share types between analysis databases
- [Signature Libraries](../../dev/annotation.md#signature-libraries): Signature libraries are used to match names of functions with signatures for code that is statically compiled
diff --git a/docs/guide/types/platformtypes.md b/docs/guide/types/platformtypes.md
index 286615e6..cf1b8fc4 100644
--- a/docs/guide/types/platformtypes.md
+++ b/docs/guide/types/platformtypes.md
@@ -3,9 +3,9 @@
Binary Ninja pulls type information from a variety of sources. The highest-level source are the platform types loaded for the given platform (which includes operating system and architecture). There are two sources of platform types. The first are shipped with the product in a [binary path](../index.md#directories). The second location is in your [user folder](../index.md#user-folder) and is intended for you to put custom platform types.
???+ Danger "Warning"
- Do NOT make changes to platform types in the binary path as they will be overwritten any time Binary Ninja updates.
+ Do NOT make changes to platform types in the binary path as they will be overwritten any time Binary Ninja updates.
-Platform types are used to define types that should be available to all programs available on that particular platform. They are only for global common types. Consider, for example, that you might want to add the following on windows:
+Platform types are used to define types that should be available to all programs available on that particular platform. They are only for global common types. Consider, for example, that you might want to add the following on Windows:
```
typedef uint8_t u8;
@@ -17,7 +17,7 @@ You could write this type into:
/home/user/.binaryninja/types/platform/windows-x86.c
```
-And any time you opened a 32bit windows binary, that type would be available to use. However, please note that these are not substitutes for [Type Libraries](../../dev/annotation.md#type-libraries). Type Libraries are used to provide a collection of types for a given library such as a libc, or common DLL.
+And any time you opened a 32bit windows binary, that type would be available to use. However, please note that these are not substitutes for [Type Libraries](../../dev/annotation.md#type-libraries). Type Libraries are used to provide a collection of types for a given library such as a libc, or common DLL.
???+ Warning "Tip"
If you don't know the specific platform (and thus filename) you need to create for a given file, just enter `bv.platform` in the scripting console.
@@ -26,7 +26,7 @@ And any time you opened a 32bit windows binary, that type would be available to
You may wish to provide types that are common across multiple architectures or platforms. The easiest way to do this is to use a `#include "filename.c"` line in the specific platform so that any common types will be loaded.
-The base path for these files is in your [user folder](../index.md#user-folder) inside of a "types/platform" subfolder.
+The base path for these files is in your [user folder](../index.md#user-folder) inside a "types/platform" subfolder.
For example, something like:
diff --git a/docs/guide/types/type.md b/docs/guide/types/type.md
index b3ab9f09..9b0306b4 100644
--- a/docs/guide/types/type.md
+++ b/docs/guide/types/type.md
@@ -33,7 +33,7 @@ When used on an integer, all matching enumeration members will be shown.
1. Name of currently selected enum
1. Checkbox (set by default) that hides enums with no matching members for the current integer.
-However in instances where the hotkey is used on other variables, the display will only be used to apply the enum type to the selection and does not allow editing.
+However, in instances where the hotkey is used on other variables, the display will only be used to apply the enum type to the selection and does not allow editing.
## Union Field Resolution
@@ -61,7 +61,7 @@ typedef struct
This is a tagged union; there's an enum defining the different variants of the union, and then the actual union variants/members. The union should take up as much space as the largest variant, so in this case it will usually be 8 bytes (depends on the target machine's pointer width), but only one variant can occupy those bytes at a time.
-When you apply a union type to a variable, you can use the "Field Resolution" option in the right-click menu to change which variant is used for a given instruction.
+When you apply a union type to a variable, you can use the "Field Resolution" option in the right-click menu to change which variant is used for a given instruction.
![Field Resolution Menu](../../img/select-union-field-resolution.png "Field Resolution Menu")
@@ -125,4 +125,4 @@ This also works within data variables with structure type. For example, if the s
Many characters commonly used in function naming are not valid C characters. For example, `::` in C++ types, braces or brackets. While we use clang's type-parser for such APIs as [parse_type_string](https://api.binary.ninja/binaryninja.binaryview-module.html#binaryninja.binaryview.BinaryView.parse_type_string) (note there's also [another version](https://api.binary.ninja/binaryninja.typeparser-module.html#binaryninja.typeparser.TypeParser.parse_type_string) of that API independent of the BinaryView off of the TypeParser module).
-To resolve this, we use `` ` `` (the backtick character) to enclose strings that should be treated as atomic units in the type-parser. You may notice this yourself if you by creating a struct with `:` in the name and then using `n` on the variable to see how it is escaped in the change name dialog.
+To resolve this, we use `` ` `` (the backtick character) to enclose strings that should be treated as atomic units in the type-parser. You may notice this yourself if you create a struct with `:` in the name and then use `n` on the variable to see how it is escaped in the change name dialog.
diff --git a/docs/guide/types/typeimportexport.md b/docs/guide/types/typeimportexport.md
index 43fbfa90..c245deef 100644
--- a/docs/guide/types/typeimportexport.md
+++ b/docs/guide/types/typeimportexport.md
@@ -21,7 +21,7 @@ This feature enables a number of workflows:
### Porting Analysis Between Target Versions
-If you're working with version 1 of a file which has symbols and you now want to port your work over to version 2 (as long as they both have symbols). This isn't going to be perfect as this feature isn't interactive and doesn't take into account changes in parameter counts or ordering, so *use this with caution*.
+If you're working with version 1 of a file which has symbols, and you now want to port your work over to version 2 (as long as they both have symbols). This isn't going to be perfect as this feature isn't interactive and doesn't take into account changes in parameter counts or ordering, so *use this with caution*.
### Quickly Defining Externs
@@ -35,17 +35,17 @@ If you already have a collection of headers containing types you want to use, yo
- `-I<path>` for various user header paths
- `-D<macro>=<value>` for macro definitions
- `-x c -std=c99` to specify C99 mode
-- Other Clang-compatible command-line flags are accepted (eg `-fms-extensions`, `-fms-compatibility`, etc)
+- Other Clang-compatible command-line flags are accepted (e.g. `-fms-extensions`, `-fms-compatibility`, etc.)
You can specify that types from system headers, accessed via `#include <header.h>`, will be in the results. Otherwise, only files from user headers, accessed via `#include "header.h"` will be used.
-You can also specify Define Binary Ninja Macros, which makes the type parser include the various parser extensions that Binary Ninja allows in the Type View editors, eg `__packed`, `__padding`, `__syscall`, etc. You probably only want to use this option when importing a header file exported using [Export Header File](#export-header-file).
+You can also specify Define Binary Ninja Macros, which makes the type parser include the various parser extensions that Binary Ninja allows in the Type View editors, e.g. `__packed`, `__padding`, `__syscall`, etc. You probably only want to use this option when importing a header file exported using [Export Header File](#export-header-file).
After specifying the file(s) and flag(s), pressing Preview will give a list of all the types and functions defined in the file(s). You may check or uncheck the box next to any of the types/functions to control whether they will be imported to your analysis.
If there were any parse errors, those will be shown instead of a list of types. Generally speaking, what this means is you're missing either header search paths or compile definitions. See the section below on [finding system headers](#finding-system-headers).
-After pressing Import, all the checked types/functions will be added to your analysis. Imported types will override any existing types you had defined so they are disabled by default as indicated via the `Exists Already` column. Imported functions will replace signatures of any functions in your analysis whose name matches signatures found in the header.
+After pressing Import, all the checked types/functions will be added to your analysis. Imported types will override any existing types you had defined, so they are disabled by default as indicated via the `Exists Already` column. Imported functions will replace signatures of any functions in your analysis whose name matches signatures found in the header.
![Importing a header file](../../img/import-header.png "Importing a header file")
@@ -105,7 +105,7 @@ From this example, the flags would be:
##### For Windows
-For windows, there's no easy command to list all the include paths so you have to piece them together from the `Include Directory` property in a Visual Studio project. You also want to include `-x c -std=c99` since Windows headers include lots of C++ types that the type importer currently does not support.
+For windows, there's no easy command to list all the include paths, so you have to piece them together from the `Include Directory` property in a Visual Studio project. You also want to include `-x c -std=c99` since Windows headers include lots of C++ types that the type importer currently does not support.
You will end up with something like the following for user mode:
@@ -136,7 +136,7 @@ Note that some header files might require manually including a specific `windows
##### Cross-Platform Targets
-If you are analyzing a target that is for a different operating system, you need to both find the header include paths for that system, and copy (or mount) them to a location accessible by the computer running Binary Ninja.
+If you are analyzing a target that is for a different operating system, you need to both find the header include paths for that system, and copy (or mount) them to a location accessible by the computer running Binary Ninja.
### Export Header File
@@ -147,9 +147,9 @@ If you want to compile code using the structures you defined during your analysi
Binary Ninja pulls type information from a variety of sources. The highest-level source are the platform types loaded for the given platform (which includes operating system and architecture). There are two sources of platform types. The first are shipped with the product in a [binary path](../index.md#directories). The second location is in your [user folder](../index.md#user-folder) and is intended for you to put custom platform types.
???+ Danger "Warning"
- Do NOT make changes to platform types in the binary path as they will be overwritten any time Binary Ninja updates.
+ Do NOT make changes to platform types in the binary path as they will be overwritten any time Binary Ninja updates.
-Platform types are used to define types that should be available to all programs available on that particular platform. They are only for global common types. Consider, for example, that you might want to add the following on windows:
+Platform types are used to define types that should be available to all programs available on that particular platform. They are only for global common types. Consider, for example, that you might want to add the following on Windows:
```
typedef uint8_t u8;
@@ -161,7 +161,7 @@ You could write this type into:
/home/user/.binaryninja/types/platform/windows-x86.c
```
-And any time you opened a 32bit windows binary, that type would be available to use. However, please note that these are not substitutes for [Type Libraries](../../dev/annotation.md#type-libraries). Type Libraries are used to provide a collection of types for a given library such as a libc, or common DLL.
+And any time you opened a 32bit Windows binary, that type would be available to use. However, please note that these are not substitutes for [Type Libraries](../../dev/annotation.md#type-libraries). Type Libraries are used to provide a collection of types for a given library such as a libc, or common DLL.
???+ Warning "Tip"
If you don't know the specific platform (and thus filename) you need to create for a given file, just enter `bv.platform` in the scripting console.
diff --git a/docs/guide/warp.md b/docs/guide/warp.md
index 1872f5d7..1c097515 100644
--- a/docs/guide/warp.md
+++ b/docs/guide/warp.md
@@ -11,8 +11,8 @@ The bundled plugin is open source and is located [here](https://github.com/Vecto
## How WARP Works
-WARP works by making a function GUID based off the byte contents of the function. Because WARP creates this GUID based
-off the byte contents, the functions are expected to be an exact match, aside from variant instructions.
+WARP works by making a function GUID based off the byte contents of the function. Because WARP creates this GUID based
+off the byte contents, the functions are expected to be an exact match, aside from variant instructions.
To use WARP, you only need to know that the function GUID's must match across binaries for the function information to be considered.
To read more about how WARP works, please see the GitHub repository [here](https://github.com/vector35/warp).
@@ -45,13 +45,13 @@ Files are automatically loaded from two locations when Binary Ninja starts:
- [User Directory] + `/signatures/`
- Can be disabled using the setting `analysis.warp.loadUserFiles`.
-???+ Danger "Warning"
+???+ Danger "Warning"
Always place your signature libraries in your user directory. The installation 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.
### Manually
-Aside from using the signature directory you can load any WARP file manually using the
-command `WARP\\Load File` or via the UI sidebar, they both do the same thing. Once the file is
+Aside from using the signature directory you can load any WARP file manually using the
+command `WARP\\Load File` or via the UI sidebar, they both do the same thing. Once the file is
loaded, you do not need to load if for every view, it is available globally.
???+ Info "Tip"
@@ -65,23 +65,23 @@ Before you actually can create these WARP files, you must identify the binary fi
that is done, you can determine which of the following procedures is best:
=== "From the current view"
- You can create signatures for the current view by running the
- command `WARP\\Create\\From View` or by hitting the associated
+ You can create signatures for the current view by running the
+ command `WARP\\Create\\From View` or by hitting the associated
button in the WARP sidebar.
![From View](../img/warp/create_from_view.png "From View")
=== "From a file"
Using the command `WARP\\Create\\From File(s)` you can create
- a signature file for an external file. This is useful if you
+ a signature file for an external file. This is useful if you
are generating signatures for library files (`.a`, `.lib`, `.rlib`).
![From File](../img/warp/create_from_file.png "From File")
=== "From the current project"
- When dealing with a large dataset, you will want a way to process
- files in parallel, using the `WARP\\Create\\From Project` command
- you can generate signatures for any set of files in a project, this
+ When dealing with a large dataset, you will want a way to process
+ files in parallel, using the `WARP\\Create\\From Project` command
+ you can generate signatures for any set of files in a project, this
includes archive formats like library files (`.a`, `.lib`, `.rlib`).
![From Project](../img/warp/create_from_project.png "From Project")
@@ -108,7 +108,7 @@ will be prompted whether you want to keep the existing data, you will want to sa
### File size
-Information in the WARP file will be deduplicated across all processed files automatically.
+Information in the WARP file will be deduplicated across all processed files automatically.
If your files are too large, try and adjust the file data to something like "Symbols" only, and if you are looking to
make the files load quicker, turn off compression.
@@ -182,13 +182,13 @@ to provide an inexpensive base layer of function matching and an open source fil
### Why does the exact same function have a different function GUID?
-Using the render layer, you can identify differences in the two functions guid construction:
+Using the render layer, you can identify differences in the two functions GUID construction:
- Highlighted red is "variant instruction"
- Highlighted yellow is "computed variant instruction"
- Highlighted black is "blacklisted instruction"
-The function guid will differ if the instruction highlights are not exactly the same across all instructions in both functions.
+The function GUID will differ if the instruction highlights are not exactly the same across all instructions in both functions.
![Render Layer](../img/warp/render_layer.png "Render Layer")