NationalSecurityAgency/ghidra · error · IllegalArgumentException
AddressSpace '{}' is not in this trace (language={})
Error message
AddressSpace '{}' is not in this trace (language={}) What it means
DBTrace.assertValidSpace verifies an AddressSpace actually belongs to the trace's own address factory (built from its base language/compiler spec). It allows OTHER_SPACE and NO_ADDRESS as universal escapes. Any other space whose SpaceID is not registered (i.e. produced by a different language's address factory) is rejected, because addresses from a foreign language cannot be interpreted in this trace.
Source
Thrown at Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTrace.java:261
@Internal
public void assertValidAddress(Address pc) {
if (pc == null) {
return;
}
assertValidSpace(pc.getAddressSpace());
}
@Internal
public void assertValidSpace(AddressSpace as) {
if (as == AddressSpace.OTHER_SPACE) {
return;
}
if (as == Address.NO_ADDRESS.getAddressSpace()) {
return;
}
if (baseAddressFactory.getAddressSpace(as.getSpaceID()) != as) {
throw new IllegalArgumentException("AddressSpace '" + as +
"' is not in this trace (language=" + getBaseLanguage() + ")");
}
}
@Override
public DBTraceChangeSet getChangeSet() {
return traceChangeSet;
}
// Internal
public DBCachedObjectStoreFactory getStoreFactory() {
return storeFactory;
}
@Override
public String getDescription() {
return "Trace";
}View on GitHub (pinned to d5f144c24d)
Solutions
- Translate addresses through the platform's address mapping (platform.mapGuestToHost / trace's address factory) before asserting.
- Ensure the Program/trace that produced the address uses the same base language as the trace.
- For guest addresses, map to host first; for OTHER_SPACE/NO_ADDRESS the guard already passes.
Example fix
// before: guest address asserted directly trace.assertValidAddress(guestPc); // after: map guest -> host (trace space) first Address hostPc = platform.mapGuestToHost(guestPc); trace.assertValidAddress(hostPc);
Defensive patterns
Strategy: validation
Validate before calling
AddressSpace as = pc.getAddressSpace();
if (as != AddressSpace.OTHER_SPACE && as != Address.NO_ADDRESS.getAddressSpace()
&& trace.getAddressFactory().getAddressSpace(as.getSpaceID()) != as) {
throw new IllegalStateException("AddressSpace not in this trace: " + as);
} Type guard
static boolean spaceBelongsToTrace(Trace trace, AddressSpace as) {
if (as == AddressSpace.OTHER_SPACE) return true;
if (as == Address.NO_ADDRESS.getAddressSpace()) return true;
return trace.getAddressFactory().getAddressSpace(as.getSpaceID()) == as;
} Try / catch
try {
trace.assertValidSpace(as);
} catch (IllegalArgumentException e) {
if (e.getMessage().contains("not in this trace")) {
// re-derive address from this trace's address factory / map guest->host
} else throw e;
} Prevention
- Always derive addresses from the trace's own address factory or map guest addresses to host first.
- Do not mix addresses across traces or between a Program and a Trace of different languages.
- When recording, set PC from values decoded with the same base language as the trace.
When it happens
Trigger: Calling assertValidAddress(pc) or assertValidSpace(as) with an address whose AddressSpace comes from a different language's AddressFactory than the trace's base language (mismatched architecture). Passing a guest-platform address directly into host assertions.
Common situations: Recording a trace under one language but computing PC/addresses from a Program loaded with another (e.g. version-mismatched) language. Mixing addresses across traces. Thread/PC set from an external source with a stale language reference.
Related errors
- No such address space: %s
- Return address must be in {}
- Return address must be in {}
- Usage: ghidra trace start [NAME]
- Usage: ghidra trace stop
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/a700da21389db343.
Report an issue: GitHub.