NationalSecurityAgency/ghidra · error · NoStaticMappingException

The resulting target process has no mapping to the static im

Error message

The resulting target process has no mapping to the static image.

What it means

Thrown as NoStaticMappingException after the module-mapping wait timed out and the subsequent invokeMapper call returned false. Ghidra needs to correlate dynamic target modules with the static program image to resolve symbols; when no mapping can be established automatically or manually, the launch cannot proceed meaningfully.

Source

Thrown at Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/AbstractTraceRmiLaunchOffer.java:674

		DebuggerStaticMappingService mappingService =
			tool.getService(DebuggerStaticMappingService.class);
		monitor.setMessage("Waiting for module mapping");
		try {
			listenForMapping(mappingService, connection, trace).get(getTimeoutMillis(),
				TimeUnit.MILLISECONDS);
		}
		catch (TimeoutException e) {
			monitor.setMessage(
				"Timed out waiting for module mapping. Invoking the mapper.");
			boolean mapped;
			try {
				mapped = invokeMapper(monitor, mappingService, connection, trace, spec);
			}
			catch (CancelledException ce) {
				throw new CancellationException(e.getMessage());
			}
			if (!mapped) {
				throw new NoStaticMappingException(
					"The resulting target process has no mapping to the static image.");
			}
		}
		monitor.increment();
	}

	@Override
	public LaunchResult launchProgram(TaskMonitor monitor, LaunchConfigurator configurator) {
		if (requiresImage() && program == null) {
			throw new IllegalStateException("Offer requires image, but no program given.");
		}
		InternalTraceRmiService service = tool.getService(InternalTraceRmiService.class);
		DebuggerTraceManagerService traceManager =
			tool.getService(DebuggerTraceManagerService.class);
		final PromptMode mode = configurator.getPromptMode();
		boolean prompt = mode == PromptMode.ALWAYS;

		DefaultTraceRmiAcceptor acceptor = null;

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Ensure the correct program (matching the target binary) is open and active in Ghidra before launching.
  2. Manually establish a static mapping (via the Debugger Static Mapping UI) and retry the launch.
  3. Check that the target exposes module information the mapper can use (symbols, base addresses).
  4. If the target uses ASLR, configure the launch to provide the load base or disable ASLR for the session.
Defensive patterns

Strategy: fallback

Validate before calling

// Before launching, confirm a mapping convention exists for this program/target pair
DebuggerStaticMappingService ms = tool.getService(DebuggerStaticMappingService.class);
if (ms.findMapping(trace, program) == null) { /* warn user, offer manual mapping */ }

Try / catch

try { performLaunch(...); }
catch (NoStaticMappingException e) {
    // open the Static Mapping dialog, let user map, then retry
}

Prevention

When it happens

Trigger: During launch, after the RMI connection is established, the platform waits for a module-mapping event. On timeout it tries to invoke the configured mapper; if that also fails to produce any mapping, this exception aborts the launch.

Common situations: The wrong program is open in Ghidra for the target being debugged; the target binary is stripped or uses unusual load addresses the mapper can't reconcile; ASLR with no base-address hint; a custom/proprietary binary with no standard module info; the static mapping service has no configured conventions for this target.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/49998fad9dc4ce92. Report an issue: GitHub.