For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

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 formida:///<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>?....

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.)

This approach is intended for teams working on the same binaries.

  1. To make ida:// links clickable system-wide, install HCLI and run:

hcli ida protocol register

This registers hcli as the system handler for the ida scheme.

  1. After registration, clicking an ida:// link in any application invokes hcli 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.

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.

The SDK exposes the same call as a single inline function in kernwin.hpp:

Notes and limitations

  • Inside IDA, open_ida_link must be invoked on the UI thread. From a worker thread, marshal the call onto the main thread (e.g. execute_sync in C++ or ida_kernwin.execute_sync in Python).

  • open_ida_link works in the IDA Pro GUI. It is not meaningful in headless / idalib contexts and returns False there.

  • 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-name is 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. With hcli named 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 match hcli finds. Sources are searched in the order they were registered, recursively, and hcli stops 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?