public interface

IEAssign

implements IEStatement
com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEAssign

Class Overview

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, ...)

Summary

[Expand]
Inherited Constants
From interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement
Public Methods
abstract boolean downgradeCallToBreak()
Downgrade a call-to-sub to a simple flow-breaker.
abstract IEAssign duplicateWithNewOperands(IEGeneric dst, IEGeneric src)
abstract IEImm evaluate(EState state, boolean skipPCUpdate)
abstract IEBranchDetails getBranchDetails()
Retrieve the branching details of a PC-assign, if any.
abstract IEBranchDetails getBranchDetails(boolean createIfNecessary)
Get or create the branching details of a PC-assign.
abstract IFlowInformation getBreakingFlow(long instructionAddress, boolean keepNativeAddresses)
abstract IEGeneric getDstOperand()
Retrieve the destination operand of this assignment.
abstract IEGeneric getLeftOperand()
Retrieve the destination operand of this assignment.
abstract IEGeneric getRightOperand()
Retrieve the source operand of this assignment.
abstract IEGeneric getSrcOperand()
Retrieve the source operand of this assignment.
abstract boolean isBranching()
abstract boolean isBreakingFlow()
abstract boolean isRoutineCall()
abstract boolean isTentativeCall()
abstract boolean setBranchDetails(IEBranchDetails branchDetails)
Set branching instructions for a PC-assign.
abstract boolean upgradeBreakToCall(long instructionAddress)
Upgrade a flow-breaker to a call-to-sub or potential (non-returning) call-to-sub.
[Expand]
Inherited Methods
From interface com.pnfsoftware.jeb.core.units.code.IInstruction
From interface com.pnfsoftware.jeb.core.units.code.IInstructionOperand
From interface com.pnfsoftware.jeb.core.units.code.IResizableInstruction
From interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric
From interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement

Public Methods

public abstract 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

public abstract IEAssign duplicateWithNewOperands (IEGeneric dst, IEGeneric src)

public abstract IEImm evaluate (EState state, boolean skipPCUpdate)

public abstract IEBranchDetails getBranchDetails ()

Retrieve the branching details of a PC-assign, if any.

Returns
  • may be null

public abstract 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.

Returns
  • never null

public abstract IFlowInformation getBreakingFlow (long instructionAddress, boolean keepNativeAddresses)

public abstract IEGeneric getDstOperand ()

Retrieve the destination operand of this assignment.

public abstract IEGeneric getLeftOperand ()

Retrieve the destination operand of this assignment.

public abstract IEGeneric getRightOperand ()

Retrieve the source operand of this assignment.

public abstract IEGeneric getSrcOperand ()

Retrieve the source operand of this assignment.

public abstract boolean isBranching ()

public abstract boolean isBreakingFlow ()

Returns
  • true if this IR is a simple flow-breaker PC-assign

public abstract boolean isRoutineCall ()

Returns
  • true if this IR is a call-to-sub PC-assign

public abstract boolean isTentativeCall ()

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

public abstract boolean setBranchDetails (IEBranchDetails branchDetails)

Set branching instructions for a PC-assign.

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

Returns
  • change indicator

public abstract 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