diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/PcodeExecutor.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/PcodeExecutor.java index 9145bfd3cd..cb93a5b2d7 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/PcodeExecutor.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/PcodeExecutor.java @@ -102,23 +102,11 @@ public class PcodeExecutor { throw new LowlevelError("Unsupported pcode op" + op); } if (b instanceof UnaryOpBehavior) { - Varnode in1Var = op.getInput(0); - Varnode outVar = op.getOutput(); - T in1 = state.getVar(in1Var); - T out = arithmetic.unaryOp((UnaryOpBehavior) b, outVar.getSize(), - in1Var.getSize(), in1); - state.setVar(outVar, out); + executeUnaryOp(op, (UnaryOpBehavior) b); return; } if (b instanceof BinaryOpBehavior) { - Varnode in1Var = op.getInput(0); - Varnode in2Var = op.getInput(1); - Varnode outVar = op.getOutput(); - T in1 = state.getVar(in1Var); - T in2 = state.getVar(in2Var); - T out = arithmetic.binaryOp((BinaryOpBehavior) b, outVar.getSize(), - in1Var.getSize(), in1, in2Var.getSize(), in2); - state.setVar(outVar, out); + executeBinaryOp(op, (BinaryOpBehavior) b); return; } switch (op.getOpcode()) { @@ -172,6 +160,26 @@ public class PcodeExecutor { return (int) vn.getAddress().getOffset(); } + public void executeUnaryOp(PcodeOp op, UnaryOpBehavior b) { + Varnode in1Var = op.getInput(0); + Varnode outVar = op.getOutput(); + T in1 = state.getVar(in1Var); + T out = arithmetic.unaryOp(b, outVar.getSize(), + in1Var.getSize(), in1); + state.setVar(outVar, out); + } + + public void executeBinaryOp(PcodeOp op, BinaryOpBehavior b) { + Varnode in1Var = op.getInput(0); + Varnode in2Var = op.getInput(1); + Varnode outVar = op.getOutput(); + T in1 = state.getVar(in1Var); + T in2 = state.getVar(in2Var); + T out = arithmetic.binaryOp(b, outVar.getSize(), + in1Var.getSize(), in1, in2Var.getSize(), in2); + state.setVar(outVar, out); + } + public void executeLoad(PcodeOp op) { int spaceID = getIntConst(op.getInput(0)); AddressSpace space = language.getAddressFactory().getAddressSpace(spaceID);