Merge remote-tracking branch 'origin/patch'

This commit is contained in:
Ryan Kurtz 2023-06-27 06:21:32 -04:00
commit dd60a8af36
2 changed files with 20 additions and 1 deletions

View file

@ -25,6 +25,7 @@ import ghidra.program.model.data.DataType;
import ghidra.program.model.listing.Function; import ghidra.program.model.listing.Function;
import ghidra.program.model.pcode.PcodeOp; import ghidra.program.model.pcode.PcodeOp;
import ghidra.program.model.pcode.PcodeOpAST; import ghidra.program.model.pcode.PcodeOpAST;
import ghidra.program.model.pcode.VarnodeAST;
/** /**
* A warning issued while unwinding a stack * A warning issued while unwinding a stack
@ -186,6 +187,17 @@ public interface StackUnwindWarning {
} }
} }
/**
* While analyzing an indirect call, couldn't get the function signature because its input doesn't have a high variable.
*/
public record NoHighVariableFromTargetPointerTypeUnwindWarning(VarnodeAST vn)
implements StackUnwindWarning {
@Override
public String getMessage() {
return "Input of indirect call target has no high variable: " + vn;
}
}
/** /**
* While analyzing an indirect call, the signature could not be derived from call-site context. * While analyzing an indirect call, the signature could not be derived from call-site context.
*/ */

View file

@ -216,7 +216,14 @@ class SymPcodeExecutor extends PcodeExecutor<Sym> {
*/ */
protected FunctionSignature getSignatureFromTargetPointerType(PcodeOpAST op) { protected FunctionSignature getSignatureFromTargetPointerType(PcodeOpAST op) {
VarnodeAST target = (VarnodeAST) op.getInput(0); VarnodeAST target = (VarnodeAST) op.getInput(0);
DataType dataType = target.getHigh().getDataType(); HighVariable high = target.getHigh();
if (high == null) {
warnings.add(new NoHighVariableFromTargetPointerTypeUnwindWarning(target));
return null;
}
DataType dataType = high.getDataType();
if (!(dataType instanceof Pointer ptrType)) { if (!(dataType instanceof Pointer ptrType)) {
warnings.add(new UnexpectedTargetTypeStackUnwindWarning(dataType)); warnings.add(new UnexpectedTargetTypeStackUnwindWarning(dataType));
return null; return null;