All Superinterfaces:
IEGeneric, IEStatement, IInstruction, IInstructionOperand, IResizableInstruction

@Ser public interface IEAssign extends IEStatement
IR expression representing an assignment. A special case is the assignment to the PC (see below).

The only valid destination operands of an EAssign are:
- EVar, including PC
- EMem
- ESlice(any_of_the_above_recursively_except_PC)
- ECompose(any_of_the_above_recursively_except_PC)
- EGroupElt

Examples of valid destinations:
- REG1, REG2
- [REG1], [any_memory_address]
- ESlice(REG1), ESlice(ESlice(REG2))
- ECompose(REG1, REG2, REG3)

The following are illegal destinations:
- EImm, ERange or any other irrelevant IRE for a destination-of-assignment position
- ESlice(PC, REG1)
- EComposition(REGX, PC, ...)

  • Method Details

    • getDstOperand

      IEGeneric getDstOperand()
      Retrieve the destination operand of this assignment.
      Returns:
    • getSrcOperand

      IEGeneric getSrcOperand()
      Retrieve the source operand of this assignment.
      Returns:
    • getLeftOperand

      IEGeneric getLeftOperand()
      Retrieve the destination operand of this assignment.
      Returns:
    • getRightOperand

      IEGeneric getRightOperand()
      Retrieve the source operand of this assignment.
      Returns:
    • isBranching

      boolean isBranching()
      Returns:
    • isBreakingFlow

      boolean isBreakingFlow()
      Returns:
      true if this IR is a simple flow-breaker PC-assign
    • isRoutineCall

      boolean isRoutineCall()
      Returns:
      true if this IR is a call-to-sub PC-assign
    • isTentativeCall

      boolean isTentativeCall()
      Returns:
      true if this IR is a tentative call-to-sub PC-assign (this method will return false if isRoutineCall() returns false)
    • upgradeBreakToCall

      boolean upgradeBreakToCall(long instructionAddress)
      Upgrade a flow-breaker to a call-to-sub or potential (non-returning) call-to-sub. The source cannot be a conditional IR. If the target is unknown, the PC-assign may be converted to a potential call; if there there is a single target matching the fall-through instruction, the PC-assign may be converted to a call; else the method will fail.

      On success, all data flow analysis objects are automatically invalidated.

      Returns:
      success indicator
    • downgradeCallToBreak

      boolean downgradeCallToBreak()
      Downgrade a call-to-sub to a simple flow-breaker. The source cannot be a conditional IR. Important! The caller is responsible for updating the CFG to maintain consistency with the IR, e.g. the fall-through edge may have to be removed.

      On success, all data flow analysis objects are automatically invalidated.

      Returns:
      success indicator
    • getBreakingFlow

      IFlowInformation getBreakingFlow(long instructionAddress, boolean keepNativeAddresses)
      Parameters:
      instructionAddress -
      keepNativeAddresses -
      Returns:
    • getBranchDetails

      IEBranchDetails getBranchDetails()
      Retrieve the branching details of a PC-assign, if any.
      Returns:
      may be null
    • getBranchDetails

      IEBranchDetails getBranchDetails(boolean createIfNecessary)
      Get or create the branching details of a PC-assign.

      If a creation is necessary, the newly-created branch-details object is attached to this statement (and it will be returned by subsequent calls to getBranchDetails()), and all data flow analysis objects are automatically invalidated.

      Parameters:
      createIfNecessary -
      Returns:
      never null
    • setBranchDetails

      boolean setBranchDetails(IEBranchDetails branchDetails)
      Set branching instructions for a PC-assign.

      When setting this value, all data flow analysis objects are automatically invalidated.

      Parameters:
      branchDetails -
      Returns:
      change indicator
    • duplicateWithNewOperands

      IEAssign duplicateWithNewOperands(IEGeneric dst, IEGeneric src)
    • evaluate

      IEImm evaluate(EState state, boolean skipPCUpdate)