mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-06-01 09:45:12 +08:00
Merge remote-tracking branch 'origin/GP-2636_d-millar_update_on_writeRegisters'
This commit is contained in:
+1
-1
@@ -95,7 +95,7 @@ public class DbgLaunchProcessCommand extends AbstractDbgCommand<DbgThread> {
|
||||
}
|
||||
|
||||
private String fixPath(String input) {
|
||||
if (input.equals("")) {
|
||||
if (input == null || input.equals("")) {
|
||||
return null;
|
||||
}
|
||||
String output = input;
|
||||
|
||||
+4
-1
@@ -21,7 +21,7 @@ import java.util.Map.Entry;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import agent.dbgeng.manager.DbgThread;
|
||||
import agent.dbgeng.manager.*;
|
||||
import agent.dbgeng.manager.impl.*;
|
||||
import ghidra.async.AsyncUtils;
|
||||
import ghidra.async.TypeSpec;
|
||||
@@ -101,6 +101,7 @@ public interface DbgModelTargetRegisterBank extends DbgModelTargetObject, Target
|
||||
}
|
||||
|
||||
public default CompletableFuture<Void> doWriteRegistersNamed(Map<String, byte[]> values) {
|
||||
DbgManagerImpl manager = getManager();
|
||||
DbgThread thread = getParentThread().getThread();
|
||||
return AsyncUtils.sequence(TypeSpec.VOID).then(seq -> {
|
||||
requestNativeElements().handle(seq::nextIgnore);
|
||||
@@ -122,6 +123,8 @@ public interface DbgModelTargetRegisterBank extends DbgModelTargetObject, Target
|
||||
getParentThread().getThread().writeRegisters(toWrite).handle(seq::next);
|
||||
// TODO: Should probably filter only effective and normalized writes in the callback
|
||||
}).then(seq -> {
|
||||
manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(),
|
||||
DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE);
|
||||
broadcast().registersUpdated(getProxy(), values);
|
||||
seq.exit();
|
||||
}).finish();
|
||||
|
||||
+4
@@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import agent.dbgeng.manager.*;
|
||||
import agent.dbgeng.manager.impl.DbgManagerImpl;
|
||||
import agent.dbgeng.manager.impl.DbgRegister;
|
||||
import agent.dbgeng.model.iface2.*;
|
||||
import ghidra.async.AsyncUtils;
|
||||
@@ -141,6 +142,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> writeRegistersNamed(Map<String, byte[]> values) {
|
||||
DbgManagerImpl manager = getManager();
|
||||
return model.gateFuture(thread.listRegisters().thenCompose(regs -> {
|
||||
return requestElements(false);
|
||||
}).thenCompose(__ -> {
|
||||
@@ -159,6 +161,8 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
|
||||
return thread.writeRegisters(toWrite);
|
||||
// TODO: Should probably filter only effective and normalized writes in the callback
|
||||
}).thenAccept(__ -> {
|
||||
manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(),
|
||||
DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE);
|
||||
broadcast().registersUpdated(getProxy(), values);
|
||||
}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user