mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 09:49:23 +02:00
GP-740: Removed TargetObjectRef and cleaned up.
This commit is contained in:
parent
b9f9c69be4
commit
6614b54248
328 changed files with 3177 additions and 4428 deletions
|
@ -23,7 +23,6 @@ import agent.dbgmodel.dbgmodel.main.ModelObject;
|
|||
import agent.dbgmodel.gadp.impl.WrappedDbgModel;
|
||||
import agent.dbgmodel.manager.DbgManager2Impl;
|
||||
import agent.dbgmodel.model.impl.*;
|
||||
import ghidra.dbg.attributes.TargetObjectRef;
|
||||
import ghidra.dbg.target.TargetObject;
|
||||
import ghidra.dbg.util.PathUtils;
|
||||
|
||||
|
@ -53,7 +52,7 @@ public class DbgListElementsCommand extends AbstractDbgCommand<List<TargetObject
|
|||
synchronized (access) {
|
||||
updatedElements = new ArrayList<>();
|
||||
List<ModelObject> list = access.getElements(path);
|
||||
Map<String, ? extends TargetObjectRef> existingElements =
|
||||
Map<String, ? extends TargetObject> existingElements =
|
||||
targetObject.getCachedElements();
|
||||
|
||||
for (ModelObject obj : list) {
|
||||
|
|
|
@ -32,7 +32,6 @@ import agent.dbgmodel.jna.dbgmodel.DbgModelNative.TypeKind;
|
|||
import agent.dbgmodel.manager.DbgManager2Impl;
|
||||
import ghidra.dbg.agent.DefaultTargetObject;
|
||||
import ghidra.dbg.target.*;
|
||||
import ghidra.dbg.target.TargetAccessConditioned.TargetAccessibility;
|
||||
import ghidra.dbg.target.TargetBreakpointContainer.TargetBreakpointKindSet;
|
||||
import ghidra.dbg.target.TargetBreakpointSpec.TargetBreakpointKind;
|
||||
import ghidra.dbg.target.TargetExecutionStateful.TargetExecutionState;
|
||||
|
@ -49,7 +48,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
|
|||
protected final Map<String, TargetObject> elementsByKey = new WeakValueHashMap<>();
|
||||
|
||||
protected DbgModelSelectableObject focus;
|
||||
public TargetAccessibility accessibility = TargetAccessibility.ACCESSIBLE;
|
||||
public boolean accessible = true;
|
||||
|
||||
private ModelObject modelObject = null;
|
||||
protected Map<String, Object> intrinsics = new TreeMap<>(TargetObjectKeyComparator.ATTRIBUTE);
|
||||
|
@ -214,11 +213,10 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
|
|||
DelegateDbgModel2TargetObject delegate = (DelegateDbgModel2TargetObject) this;
|
||||
TargetObject proxy = delegate.getProxy();
|
||||
if (proxy instanceof TargetAccessConditioned) {
|
||||
attrs.put(TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME,
|
||||
accessibility == TargetAccessibility.ACCESSIBLE);
|
||||
attrs.put(TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME, accessible);
|
||||
}
|
||||
if (proxy instanceof TargetExecutionStateful) {
|
||||
TargetExecutionStateful<?> stateful = (TargetExecutionStateful<?>) proxy;
|
||||
TargetExecutionStateful stateful = (TargetExecutionStateful) proxy;
|
||||
TargetExecutionState state = stateful.getExecutionState();
|
||||
attrs.put(TargetExecutionStateful.STATE_ATTRIBUTE_NAME, state);
|
||||
}
|
||||
|
@ -269,12 +267,12 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
|
|||
attrs.put(TargetEnvironment.ARCH_ATTRIBUTE_NAME, executionType);
|
||||
}
|
||||
if (proxy instanceof TargetRegister) {
|
||||
DbgModelTargetObject bank = (DbgModelTargetObject) getImplParent();
|
||||
TargetObject container = bank.getImplParent();
|
||||
DbgModelTargetObject bank = (DbgModelTargetObject) getParent();
|
||||
TargetObject container = bank.getParent();
|
||||
attrs.put(TargetRegister.CONTAINER_ATTRIBUTE_NAME, container);
|
||||
}
|
||||
if (proxy instanceof TargetRegisterBank) {
|
||||
attrs.put(TargetRegisterBank.DESCRIPTIONS_ATTRIBUTE_NAME, getImplParent());
|
||||
attrs.put(TargetRegisterBank.DESCRIPTIONS_ATTRIBUTE_NAME, getParent());
|
||||
}
|
||||
if (proxy instanceof TargetStackFrame) {
|
||||
DbgModelTargetStackFrame frame = (DbgModelTargetStackFrame) proxy;
|
||||
|
@ -358,7 +356,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
|
|||
}
|
||||
DbgModelTargetObject test = (DbgModelTargetObject) parent;
|
||||
while (test != null && !(test.getProxy() instanceof DbgModelTargetSession)) {
|
||||
test = (DbgModelTargetObject) test.getImplParent();
|
||||
test = (DbgModelTargetObject) test.getParent();
|
||||
}
|
||||
return test == null ? null : (DbgModelTargetSession) test.getProxy();
|
||||
}
|
||||
|
@ -367,7 +365,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
|
|||
public DbgModelTargetProcess getParentProcess() {
|
||||
DbgModelTargetObject test = (DbgModelTargetObject) parent;
|
||||
while (test != null && !(test.getProxy() instanceof TargetProcess)) {
|
||||
test = (DbgModelTargetObject) test.getImplParent();
|
||||
test = (DbgModelTargetObject) test.getParent();
|
||||
}
|
||||
return test == null ? null : (DbgModelTargetProcess) test.getProxy();
|
||||
}
|
||||
|
@ -376,7 +374,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
|
|||
public DbgModelTargetThread getParentThread() {
|
||||
DbgModelTargetObject test = (DbgModelTargetObject) parent;
|
||||
while (test != null && !(test.getProxy() instanceof TargetThread)) {
|
||||
test = (DbgModelTargetObject) test.getImplParent();
|
||||
test = (DbgModelTargetObject) test.getParent();
|
||||
}
|
||||
return test == null ? null : (DbgModelTargetThread) test.getProxy();
|
||||
}
|
||||
|
|
|
@ -336,8 +336,8 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
|
|||
getModel().fetchModelValue(objPath).handle(seq::next);
|
||||
}, TypeSpec.cls(Object.class)).then((obj, seq) -> {
|
||||
if (obj instanceof DbgModelTargetExecutionStateful) {
|
||||
DbgModelTargetExecutionStateful<?> stateful =
|
||||
(DbgModelTargetExecutionStateful<?>) obj;
|
||||
DbgModelTargetExecutionStateful stateful =
|
||||
(DbgModelTargetExecutionStateful) obj;
|
||||
TargetExecutionState execState = stateful.convertState(state);
|
||||
stateful.setExecutionState(execState, reason);
|
||||
}
|
||||
|
@ -379,7 +379,7 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
|
|||
}
|
||||
|
||||
listeners.fire(TargetBreakpointListener.class)
|
||||
.breakpointHit((TargetBreakpointContainer<?>) bpt.getParent(),
|
||||
.breakpointHit((TargetBreakpointContainer) bpt.getParent(),
|
||||
getParentProcess(), null, bpt, bpt);
|
||||
bpt.breakpointHit();
|
||||
});
|
||||
|
@ -492,13 +492,12 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
|
|||
}
|
||||
|
||||
@Override
|
||||
public TargetAccessibility getAccessibility() {
|
||||
return accessibility;
|
||||
public boolean isAccessible() {
|
||||
return accessible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccessibility(TargetAccessibility accessibility) {
|
||||
this.accessibility = accessibility;
|
||||
public void setAccessible(boolean accessible) {
|
||||
this.accessible = accessible;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ import agent.dbgeng.model.iface1.DbgModelTargetInterruptible;
|
|||
import agent.dbgeng.model.iface2.DbgModelTargetObject;
|
||||
|
||||
public class DbgModel2TargetSystemMarkerImpl extends DbgModel2TargetObjectImpl
|
||||
implements DbgModelTargetInterruptible<DbgModel2TargetSystemMarkerImpl> {
|
||||
implements DbgModelTargetInterruptible {
|
||||
|
||||
// NB: this is an invisible marker whose only purpose if to enable an
|
||||
// interrupt when connecting in kernel-mode to a running target
|
||||
|
|
|
@ -19,7 +19,6 @@ import java.lang.invoke.MethodHandles;
|
|||
import java.lang.ref.Cleaner;
|
||||
import java.lang.ref.Cleaner.Cleanable;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import agent.dbgeng.manager.*;
|
||||
import agent.dbgeng.manager.breakpoint.DbgBreakpointInfo;
|
||||
|
@ -27,16 +26,14 @@ import agent.dbgeng.model.iface1.*;
|
|||
import agent.dbgeng.model.iface2.*;
|
||||
import agent.dbgmodel.dbgmodel.main.ModelObject;
|
||||
import agent.dbgmodel.jna.dbgmodel.DbgModelNative.ModelObjectKind;
|
||||
import ghidra.async.AsyncUtils;
|
||||
import ghidra.dbg.attributes.TargetObjectRef;
|
||||
import ghidra.dbg.target.*;
|
||||
import ghidra.dbg.target.TargetBreakpointSpec.TargetBreakpointAction;
|
||||
import ghidra.dbg.util.PathUtils;
|
||||
import ghidra.util.datastruct.ListenerSet;
|
||||
|
||||
public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl implements //
|
||||
DbgModelTargetAccessConditioned<DelegateDbgModel2TargetObject>, //
|
||||
DbgModelTargetExecutionStateful<DelegateDbgModel2TargetObject>, //
|
||||
DbgModelTargetAccessConditioned, //
|
||||
DbgModelTargetExecutionStateful, //
|
||||
DbgModel2TargetProxy, DbgModelTargetBptHelper {
|
||||
// Probably don-t need any of the handler-map or annotation stuff
|
||||
|
||||
|
@ -198,7 +195,7 @@ public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl imp
|
|||
}
|
||||
|
||||
public DelegateDbgModel2TargetObject clone(String key, ModelObject modelObject) {
|
||||
DbgModelTargetObject p = (DbgModelTargetObject) getImplParent();
|
||||
DbgModelTargetObject p = (DbgModelTargetObject) getParent();
|
||||
List<Class<? extends TargetObject>> mixins = new ArrayList<>();
|
||||
Class<? extends DbgModelTargetObject> mixin = lookupWrapperType(key, p.getName());
|
||||
if (mixin != null) {
|
||||
|
@ -209,27 +206,11 @@ public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl imp
|
|||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public CompletableFuture<? extends DelegateDbgModel2TargetObject> fetch() {
|
||||
return (CompletableFuture) CompletableFuture.completedFuture(proxy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DbgModelTargetObject getProxy() {
|
||||
return (DbgModelTargetObject) proxy;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public CompletableFuture<? extends DelegateDbgModel2TargetObject> fetchParent() {
|
||||
TargetObjectRef p = getParent();
|
||||
if (p == null) {
|
||||
return AsyncUtils.nil();
|
||||
}
|
||||
return (CompletableFuture<? extends DelegateDbgModel2TargetObject>) p.fetch();
|
||||
}
|
||||
|
||||
protected static String getHintForObject(ModelObject obj) {
|
||||
ModelObjectKind kind = obj.getKind();
|
||||
String ret = kind == null ? "" : kind.name();
|
||||
|
@ -309,35 +290,34 @@ public class DelegateDbgModel2TargetObject extends DbgModel2TargetObjectImpl imp
|
|||
|
||||
public void onRunning() {
|
||||
invalidate();
|
||||
setAccessibility(TargetAccessibility.INACCESSIBLE);
|
||||
setAccessible(false);
|
||||
}
|
||||
|
||||
public void onStopped() {
|
||||
setAccessibility(TargetAccessibility.ACCESSIBLE);
|
||||
setAccessible(true);
|
||||
update();
|
||||
}
|
||||
|
||||
public void onExit() {
|
||||
setAccessibility(TargetAccessibility.ACCESSIBLE);
|
||||
setAccessible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TargetAccessibility getAccessibility() {
|
||||
return accessibility;
|
||||
public boolean isAccessible() {
|
||||
return accessible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccessibility(TargetAccessibility accessibility) {
|
||||
public void setAccessible(boolean accessible) {
|
||||
synchronized (attributes) {
|
||||
if (this.accessibility == accessibility) {
|
||||
if (this.accessible == accessible) {
|
||||
return;
|
||||
}
|
||||
this.accessibility = accessibility;
|
||||
this.accessible = accessible;
|
||||
}
|
||||
if (proxy instanceof TargetAccessConditioned) {
|
||||
changeAttributes(List.of(), List.of(), Map.of( //
|
||||
TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME,
|
||||
accessibility == TargetAccessibility.ACCESSIBLE //
|
||||
TargetAccessConditioned.ACCESSIBLE_ATTRIBUTE_NAME, accessible //
|
||||
), "Accessibility changed");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue