com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEAssign |
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, ...)
[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
|
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.
Retrieve the branching details of a PC-assign, if any.
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.
isRoutineCall()
returns false)
Set branching instructions for a PC-assign.
When setting this value, all data flow analysis objects are automatically invalidated.
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.