diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/DbgEngInJvmDebuggerModelFactory.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/DbgEngInJvmDebuggerModelFactory.java index a01b4b4334..91f990d289 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/DbgEngInJvmDebuggerModelFactory.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/DbgEngInJvmDebuggerModelFactory.java @@ -15,6 +15,8 @@ */ package agent.dbgeng; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.CompletableFuture; import agent.dbgeng.model.impl.DbgModelImpl; @@ -32,12 +34,22 @@ import ghidra.dbg.util.ConfigurableFactory.FactoryDescription; ) public class DbgEngInJvmDebuggerModelFactory implements DebuggerModelFactory { - // TODO remoteTransport option? + protected String remote = "none"; // Require user to start server + @FactoryOption("DebugConnect options (.server)") + public final Property agentRemoteOption = + Property.fromAccessors(String.class, this::getAgentRemote, this::setAgentRemote); + + protected String transport = "none"; // Require user to start server + @FactoryOption("Remote process server options (untested)") + public final Property agentTransportOption = + Property.fromAccessors(String.class, this::getAgentTransport, this::setAgentTransport); @Override public CompletableFuture build() { DbgModelImpl model = new DbgModelImpl(); - return model.startDbgEng(new String[] {}).thenApply(__ -> model); + List cmds = new ArrayList<>(); + completeCommandLine(cmds); + return model.startDbgEng(cmds.toArray(new String[cmds.size()])).thenApply(__ -> model); } @Override @@ -45,4 +57,28 @@ public class DbgEngInJvmDebuggerModelFactory implements DebuggerModelFactory { return System.getProperty("os.name").toLowerCase().contains("windows"); } + public String getAgentTransport() { + return transport; + } + + public void setAgentTransport(String transport) { + this.transport = transport; + } + + public String getAgentRemote() { + return remote; + } + + public void setAgentRemote(String remote) { + this.remote = remote; + } + + protected void completeCommandLine(List cmd) { + if (!remote.equals("none")) { + cmd.addAll(List.of(remote)); + } + if (!transport.equals("none")) { + cmd.addAll(List.of(transport)); + } + } } diff --git a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/DbgModelInJvmDebuggerModelFactory.java b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/DbgModelInJvmDebuggerModelFactory.java index 0cee6215b9..8fa875f30d 100644 --- a/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/DbgModelInJvmDebuggerModelFactory.java +++ b/Ghidra/Debug/Debugger-agent-dbgmodel/src/main/java/agent/dbgmodel/DbgModelInJvmDebuggerModelFactory.java @@ -15,6 +15,8 @@ */ package agent.dbgmodel; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.CompletableFuture; import agent.dbgmodel.model.impl.DbgModel2Impl; @@ -32,10 +34,22 @@ import ghidra.dbg.util.ConfigurableFactory.FactoryDescription; ) public class DbgModelInJvmDebuggerModelFactory implements DebuggerModelFactory { + protected String remote = "none"; // Require user to start server + @FactoryOption("DebugConnect options (.server)") + public final Property agentRemoteOption = + Property.fromAccessors(String.class, this::getAgentRemote, this::setAgentRemote); + + protected String transport = "none"; // Require user to start server + @FactoryOption("Remote process server options (untested)") + public final Property agentTransportOption = + Property.fromAccessors(String.class, this::getAgentTransport, this::setAgentTransport); + @Override public CompletableFuture build() { DbgModel2Impl model = new DbgModel2Impl(); - return model.startDbgEng(new String[] {}).thenApply(__ -> model); + List cmds = new ArrayList<>(); + completeCommandLine(cmds); + return model.startDbgEng(cmds.toArray(new String[cmds.size()])).thenApply(__ -> model); } @Override @@ -43,4 +57,28 @@ public class DbgModelInJvmDebuggerModelFactory implements DebuggerModelFactory { return System.getProperty("os.name").toLowerCase().contains("windows"); } + public String getAgentTransport() { + return transport; + } + + public void setAgentTransport(String transport) { + this.transport = transport; + } + + public String getAgentRemote() { + return remote; + } + + public void setAgentRemote(String remote) { + this.remote = remote; + } + + protected void completeCommandLine(List cmd) { + if (!remote.equals("none")) { + cmd.addAll(List.of(remote)); + } + if (!transport.equals("none")) { + cmd.addAll(List.of(transport)); + } + } }