Using Deep Links
Deep links let you share an exact location in a database — a function, an address, a type — as a URL that anyone on your team can click to land in the right place.
This page walks through the three main usage scenarios: copying and following links inside IDA UI, setting up system-wide ida:// handling with HCLI for cross-application use, and generating links programmatically from scripts and plugins.
For the URL format, supported parameters and other low-level details, see the Deep Links concepts page.
Using deep links from the IDA UI
Copy link
Right-click any supported view (Disassembly, Pseudocode, Hex View, Functions, Names, Imports, Exports, Segments, Strings, Local Types, Bookmarks) and choose Copy link. IDA generates a deep link for the current cursor position or selected row and copies it to the system clipboard. The link is also echoed to the Output window.
The action is enabled whenever a database is open and a valid link can be generated for the current cursor location.
Links produced by Copy link are written in the relative form — ida:///<idb-name>/<resource>?..., with no source. IDA does not know about the sources you may have configured in hcli, so it cannot pick one for you; the empty source also happens to be the most portable choice — the link works inside IDA without any extra setup, and when followed via hcli on another machine it is resolved against all configured sources. If you want a link bound to a specific named source, edit the URL by hand to ida://<source>/<idb-name>/<resource>?....
Jump to link…
In the Jump menu, choose Jump to link… to open a prompt that accepts any ida:// URL. This is the easiest way to follow a link that arrived in chat, an issue tracker, or a document — paste, press OK, and IDA navigates to the target inside the current instance. (For cross-process navigation — i.e., clicking a link in a browser — see the next section.)
Using deep links across applications — HCLI
This approach is intended for teams working on the same binaries.
To make
ida://links clickable system-wide, install HCLI and run:
hcli ida protocol registerThis registers hcli as the system handler for the ida scheme.
After registration, clicking an
ida://link in any application invokeshcli ida open <uri>, which then takes the steps described in How it fits together.
You can run the same dispatch manually:
Named sources
A source is a name registered with hcli that maps to a directory on disk containing IDB files. Sources let you write portable URLs — the same ida://malware-samples/trojan1.i64/... link works on every teammate's machine, even when their files live in different directories.
Source names are lowercase alphanumeric plus hyphens. The name localhost is reserved.
When a link without a source is followed (ida:///<idb>/<resource>?...), hcli searches all configured sources for the named IDB.
IPC and IDA versions
In-place navigation into a running IDA depends on the IPC server that runs inside IDA 9.4 and later. On older versions, hcli can still launch IDA on the right IDB, but it cannot reach into a running instance to navigate; URLs against an already-open IDB will print a notice to that effect.
The IPC Server can be disabled via DisableIpcServer registry setting but is enabled by default and is required for communicating with hcli.
Using deep links from IDAPython
open_ida_link(uri) returns True on success and False on any failure (invalid URL, unknown resource, address not in the database, view incompatible with resource, etc.). On failure a description is written to the Output window.
Using deep links from C/C++ plugins
The SDK exposes the same call as a single inline function in kernwin.hpp:
Notes and limitations
Inside IDA,
open_ida_linkmust be invoked on the UI thread. From a worker thread, marshal the call onto the main thread (e.g.execute_syncin C++ orida_kernwin.execute_syncin Python).open_ida_linkworks in the IDA Pro GUI. It is not meaningful in headless /idalibcontexts and returnsFalsethere.Cross-process navigation requires HCLI to be installed and the protocol handler to be registered (
hcli ida protocol register).In-place navigation into a running instance requires IDA 9.4 or later (which ships the IPC server). Older IDA versions can still be launched on a specific IDB but cannot be steered after the fact.
Because
idb-nameis matched against the basename of the open database, links remain valid if you move the database to a different directory, but not if you rename it. Withhclinamed sources, the source name is the stable handle even when paths differ across machines.If the same IDB filename exists in more than one configured source, a link written without a source —
ida:///<idb-name>/...— resolves to the first matchhclifinds. Sources are searched in the order they were registered, recursively, andhclistops at the first hit; there is no warning about the collision. To disambiguate, pin the link to a specific source:ida://<source>/<idb-name>/....
Last updated
Was this helpful?
