diff options
| author | Jordan Wiens <jordan@psifertex.com> | 2023-08-29 23:31:56 -0400 |
|---|---|---|
| committer | Jordan Wiens <jordan@psifertex.com> | 2023-08-29 23:31:56 -0400 |
| commit | 9202af38c7d0d894038be4192e0a90294a7c07aa (patch) | |
| tree | abfda454f9312e813dc5a7bd83c4badf3f8145c6 /docs/dev/plugins.md | |
| parent | 1875328326356054538694240064822492534697 (diff) | |
UI plugin dev and more licensing documentation
Diffstat (limited to 'docs/dev/plugins.md')
| -rw-r--r-- | docs/dev/plugins.md | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/docs/dev/plugins.md b/docs/dev/plugins.md index 100995fb..81f212f6 100644 --- a/docs/dev/plugins.md +++ b/docs/dev/plugins.md @@ -30,6 +30,7 @@ The simplest way to run your own plugin repository is to duplicate the structure Once you've created your test repository, use the `pluginManager.unofficialName` and `pluginManager.unofficialUrl` settings to add your third-party repository. The [`add_repository`](https://api.binary.ninja/binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.add_repository) API can also be used to add the repository, though it [may require manual creation of the repository folder](https://github.com/Vector35/binaryninja-api/issues/2987). + ### Testing It's useful to be able to reload your plugin during testing. On the Commercial edition of Binary Ninja, this is easily accomplished with a stand-alone headless install using `import binaryninja` after [installing the API](https://github.com/Vector35/binaryninja-api/blob/dev/scripts/install_api.py). (install_api.py is included in each platforms respective [installation folder](../guide/index.md#binary-path)) @@ -74,6 +75,17 @@ If you wish to debug your python scripts, there are a few methods specific to di 1. Open Binary Ninja 1. Use `connect_pycharm_debugger(port=12345)` in the Python Console, using whichever port you selected in the Run Configuration. You should now see "Connected" in the PyCharm Debugger panel. +## UI Plugins + +Binary Ninja UI plugins should always `import binaryninjaui` before an `import PySide6`. Not only does this make sure the correct PySide6 is loaded (running the wrong version of PySide6 can result in crashing), but this [prevents plugins](https://github.com/Vector35/binaryninja-api/commit/55cb3e76f536bc8d4a6533bd7ea5202d464c5f81) from running headlessly. + +UI plugins can take many forms. Some, like [Snippets](https://github.com/vector35/snippets) create their own UI elements and interact via UIActions. Others extend the UI via existing UI elements such as [Triage](https://github.com/Vector35/binaryninja-api/tree/dev/python/examples/triage), [Kaitai](https://github.com/Vector35/kaitai), [hellosidebar](https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/hellosidebar.py), or [helloglobalarea](https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/helloglobalarea.py). + +Many other [third-party](https://github.com/vector35/community-plugins/) plugins also implement UI based examples, such as [BNIL Graph](https://github.com/withzombies/bnil-graph) using the FlowGraph APIs. + +Unfortunately, due to a PySide documentation generation issue, the best and most reliable documentation on the UI system is not in the regular [python](https://api.binary.ninja/) API docs, but in the [C++ documentation](https://api.binary.ninja/cpp/) which translates fairly cleanly to their python equivalent. + + ## Writing Native Plugins Writing native plugins allows for higher performance code and lower level access to the Binary Ninja API, but comes with a couple more hurdles than Python. |
