mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
GP-2834: Add Unwind Stack action, hovers for dynamic variable values.
This commit is contained in:
@@ -15,12 +15,16 @@
|
||||
*/
|
||||
package ghidra.pcode.emu.taint;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import ghidra.pcode.emu.taint.plain.TaintSpace;
|
||||
import ghidra.pcode.exec.*;
|
||||
import ghidra.pcode.exec.PcodeArithmetic.Purpose;
|
||||
import ghidra.program.model.address.Address;
|
||||
import ghidra.program.model.address.AddressSpace;
|
||||
import ghidra.program.model.lang.Language;
|
||||
import ghidra.program.model.lang.Register;
|
||||
import ghidra.program.model.mem.MemBuffer;
|
||||
import ghidra.taint.model.TaintVec;
|
||||
|
||||
@@ -116,6 +120,11 @@ public abstract class AbstractTaintPcodeExecutorStatePiece<S extends TaintSpace>
|
||||
return space.get(offset, size);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<Register, TaintVec> getRegisterValuesFromSpace(S space, List<Register> registers) {
|
||||
return space.getRegisterValues(registers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
for (S space : spaceMap.values()) {
|
||||
|
||||
@@ -71,6 +71,21 @@ public class TaintPcodeExecutorStatePiece extends AbstractTaintPcodeExecutorStat
|
||||
protected TaintSpace newSpace(AddressSpace space) {
|
||||
return new TaintSpace();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractSpaceMap<TaintSpace> fork() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaintSpace fork(TaintSpace s) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaintPcodeExecutorStatePiece fork() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
*/
|
||||
package ghidra.pcode.emu.taint.plain;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
import ghidra.pcode.emu.taint.trace.TaintTraceSpace;
|
||||
import ghidra.program.model.lang.Register;
|
||||
import ghidra.taint.model.TaintSet;
|
||||
import ghidra.taint.model.TaintVec;
|
||||
|
||||
@@ -112,4 +112,20 @@ public class TaintSpace {
|
||||
public void clear() {
|
||||
taints.clear();
|
||||
}
|
||||
|
||||
public Map<Register, TaintVec> getRegisterValues(List<Register> registers) {
|
||||
Map<Register, TaintVec> result = new HashMap<>();
|
||||
for (Register r : registers) {
|
||||
long offset = r.getAddress().getOffset();
|
||||
TaintVec vec = new TaintVec(r.getNumBytes());
|
||||
for (int i = 0; i < vec.length; i++) {
|
||||
TaintSet s = taints.get(offset + i);
|
||||
if (s == null) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
result.put(r, vec);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,9 +82,24 @@ public class TaintTracePcodeExecutorStatePiece
|
||||
PcodeTracePropertyAccess<String> backing) {
|
||||
return new TaintTraceSpace(space, property);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractSpaceMap<TaintTraceSpace> fork() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaintTraceSpace fork(TaintTraceSpace s) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaintTracePcodeExecutorStatePiece fork() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user