{"id":22842798,"url":"https://github.com/msm-code/ghidractrlp","last_synced_at":"2025-04-14T06:52:55.825Z","repository":{"id":265800573,"uuid":"896663249","full_name":"msm-code/GhidraCtrlP","owner":"msm-code","description":"Ctrl+P plugin for Ghidra: quick search and command palette.","archived":false,"fork":false,"pushed_at":"2024-12-29T23:03:53.000Z","size":338,"stargazers_count":34,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-27T20:41:02.043Z","etag":null,"topics":["ghidra","ghidra-plugin","ghidra-plugins","ghidra-scripts","productivity","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/msm-code.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-01T00:51:00.000Z","updated_at":"2025-02-28T08:15:30.000Z","dependencies_parsed_at":"2024-12-21T18:21:40.458Z","dependency_job_id":"f9e97daf-b1be-4ca2-9dc7-1835108a24c9","html_url":"https://github.com/msm-code/GhidraCtrlP","commit_stats":null,"previous_names":["msm-code/ghidractrlp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msm-code%2FGhidraCtrlP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msm-code%2FGhidraCtrlP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msm-code%2FGhidraCtrlP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msm-code%2FGhidraCtrlP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/msm-code","download_url":"https://codeload.github.com/msm-code/GhidraCtrlP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248837276,"owners_count":21169373,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ghidra","ghidra-plugin","ghidra-plugins","ghidra-scripts","productivity","reverse-engineering"],"created_at":"2024-12-13T02:10:32.630Z","updated_at":"2025-04-14T06:52:55.789Z","avatar_url":"https://github.com/msm-code.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ghidra CtrlP Script\n\nGhidra is great, but very mouse-driven by default. Some modern editors (like VS Code) provide a quick file switcher/command\npallete, commonly bound to Ctrl+P file switcher and command pallete. I decided,\nthat it would be nice to have this in ghidra.\n\nWith this script you can just press Ctrl+P and do ~~anything~~ a lot.\n\n![recording](https://github.com/user-attachments/assets/198de0f8-d6d8-4169-9d0f-5d6dc563df78)\n\n### Installation\n\n**Core:** Put `ctrlp.py` and `CtrlPQuicklaunchScript.java` in `~/ghidra_scripts` or your\nprefered script location. Then go to `Window -\u003e Script manager` and reload.\n\nI strongly recommend adding a keyboard shortcut (in `Window -\u003e Script manager`).\nAdd a keybinding to `CtrlPQuicklaunchScript.java` (don't launch `ctrlp.py` directly - the launcher role is to make this much faster).\n\nYou don't have to use `Ctrl+P`, you can assign any other hotkey if youp prefer. But if you use `Ctrl+P`,\nremember to unasign `Print` from the `Tool Options -\u003e Keybindings` (to avoid keybinding conflict).\n\n### Basic features\n\nWhen you run this script (remember to add a keybinding), a modal window appears and you may search for:\n\n| Data type | Description                     |\n| --------- | ------------------------------- |\n| Functions | Quickly navigate to any function |\n| Data      | Jump to data defined in memory |\n| Labels    | Search the labels in your program |\n| Bookmarks | Browse bookmarks without using a keyboard |\n| Windows   | Switch to or open any window instantly |\n| Scripts   | Launch scripts without painfully browsing the script manager |\n| Actions   | Run any available action, even if you don't remember the keybinding |\n\nSome of the available data types are visible on the screenshot below:\n\n![](./docs/more.png)\n\n### Slightly more advanced features\n\n**Keybindings**\n\nOther than the obvious (arrows, home/end, page up/down), you can press:\n\n| Keybinding | Description                    |\n| --------- | ------------------------------- |\n| `Enter` | accept the current selection (go to the selected location, or execute the selected script, etc). |\n| `Ctrl+Enter` | Go to the first XRef of the selected location if one exists. |\n| `Esc` | close the current window without doing anything |\n| `Ctrl+r` | start a XRef search - start searching for the Xrefs to the currently selected element. Cancel with Esc. |\n| `Ctrl+c` | copy a text of the highlighted element |\n| `Ctrl+Shift+c` | copy address (if any) of the highlighted element |\n| `Ctrl+d` | toggle a quick bookmark at the highlighted location (add, or remove if exists). Bookmarked symbols are shown with a `[*]` tag at the end (you can filter by this too). |\n| `Ctrl+q` | by default the window is only hidden when closed (to speed up future executions). Press this shortcut to forcefully really close the window. May be useful to restart script in case of a bug. |\n\n**Filtering**\n\nIn the future we may implementsomething fzf-like, but for now the algorithm is simpler. User input is split on whitespace, for example `main get int` is split into `[\"main\", \"get\", \"int\"]`.\nTo match, text must contain ALL of these fragments. In practice this seems to work very well for me.\n\n*One exception: filtering by \"fnc\", \"bkm\", \"scr\"... is special and restricts by type*\n\n**Alternative modes**\n\nI want this plugin to remain focused on quick jumping/command execution, but I couldn't resist blazing fast memory searches too.\n\nIf you start your query with `\"`, `'` or `{`, you will get a list of search results instead of the usual contents. There are three modes:\n\n| Prefix | Description                    |\n| ------ | ------------------------------- |\n| `\"`    | Case sensitive text search  |\n| `'`    | Case insensitive text search  |\n| `{`    | Byte search (written in hex, wildcards not supported). |\n| `=`    | Python calculator. You can use it for quick math (enter copies to clipboard). |\n\n![](./docs/quicksearch.png)\n\nIf you don't want this behaviour, you can disable it by prepending a space to your query.\n\nWarning: it's **not** optimized: it will rescan whole program memory for every character typed. Avoid with large programs.\n\n**Other notes**\n\nThe plugin tries to use `\"FiraCode Nerd Font Mono\"` font, and if that fails it falls back to `\"Monospaced\"`.\nIn the future maybe I'll try to get the default font for listing for example.\n\nThere is a support for dark theme (the colors adjust themselves).\n\n### Disclaimer\n\nThis is my first Ghidra UI plugin, code quality could be much better. I'm using it daily, and I will slowly improve it.\n\nIf you like it, check out my [other project](https://github.com/msm-code/ghidralib) - [ghidralib](https://github.com/msm-code/ghidralib),\na Pythonic standard library for Ghidra.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsm-code%2Fghidractrlp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmsm-code%2Fghidractrlp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsm-code%2Fghidractrlp/lists"}