public class

BasicBlock

extends Object
implements IBasicBlock<InsnType extends IInstruction>
java.lang.Object
   ↳ com.pnfsoftware.jeb.core.units.code.android.controlflow.BasicBlock<InsnType extends com.pnfsoftware.jeb.core.units.code.ILocatedInstruction>

Class Overview

This class represents a basic block of generic instructions.

This class is to be deprecated and used only by the Android package.

See Also

Summary

Public Constructors
BasicBlock()
Create a new empty basic block.
Public Methods
void add(InsnType insn)

DANGEROUS! Append an instruction to the block.

int allinsize()
Get the number of regular and irregular input edges to this block.
int alloutsize()
Get the number of regular and irregular output edges from this node.
InsnType get(int index)
Get the instruction at the specified index.
List<BasicBlock<InsnType>> getAllInputBlocks()
Get regular and irregular input blocks.
List<BasicBlock<InsnType>> getAllOutputBlocks()
Get regular and irregular output blocks.
long getEndAddress()
Address following the last instruction of the block (ie, last exclusive address).
long getFirstAddress()
Address of first instruction in the block.
BasicBlock<InsnType> getInputBlock(int index)
Get a regular input block.
List<BasicBlock<InsnType>> getInputBlocks()
Get the regular input blocks.
List<InsnType> getInstructions()
Get a copy of the list of instructions that make up this basic block.
List<BasicBlock<InsnType>> getIrregularInputBlocks()
Get irregular input blocks.
List<BasicBlock<InsnType>> getIrregularOutputBlocks()
Get irregular output blocks.
InsnType getLast()
Get the last instruction of the block.
long getLastAddress()
Address of last instruction in the block.
BasicBlock<InsnType> getOutputBlock(int index)
Get a regular output block.
List<BasicBlock<InsnType>> getOutputBlocks()
Get the regular output blocks.
int insize()
Get the number of regular input edges to this block.
int irrinsize()
Get the number of irregular input edges from this node.
int irroutsize()
Get the number of irregular output edges from this node.
boolean isEmpty()
Determine if the block has 0 instruction.
boolean isInfiniteLoop()
Check if the block has a single regular out-edge which points to itself.
boolean isSelfReferencing()
Check if the block has at least one regular out-edge pointing to itself.
int outsize()
Get the number of regular output edges from this node.
boolean remove(int index)

DANGEROUS! Remove an instruction from the block.

int size()
Get the number of instructions in the block.
String toString()
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.pnfsoftware.jeb.core.units.code.IBasicBlock

Public Constructors

public BasicBlock ()

Create a new empty basic block.

Public Methods

public void add (InsnType insn)

DANGEROUS! Append an instruction to the block.

The instruction is appended to the block. The edges are not updated.
The caller is solely responsible for maintaining the consistency of the block and of the CFG.

Parameters
insn the instruction to be appended

public int allinsize ()

Get the number of regular and irregular input edges to this block.

public int alloutsize ()

Get the number of regular and irregular output edges from this node.

public InsnType get (int index)

Get the instruction at the specified index.

public List<BasicBlock<InsnType>> getAllInputBlocks ()

Get regular and irregular input blocks.

public List<BasicBlock<InsnType>> getAllOutputBlocks ()

Get regular and irregular output blocks.

public long getEndAddress ()

Address following the last instruction of the block (ie, last exclusive address).

public long getFirstAddress ()

Address of first instruction in the block.

public BasicBlock<InsnType> getInputBlock (int index)

Get a regular input block.

public List<BasicBlock<InsnType>> getInputBlocks ()

Get the regular input blocks.

Returns
  • a copy of the list of regular input blocks

public List<InsnType> getInstructions ()

Get a copy of the list of instructions that make up this basic block.

public List<BasicBlock<InsnType>> getIrregularInputBlocks ()

Get irregular input blocks.

public List<BasicBlock<InsnType>> getIrregularOutputBlocks ()

Get irregular output blocks.

public InsnType getLast ()

Get the last instruction of the block.

public long getLastAddress ()

Address of last instruction in the block.

public BasicBlock<InsnType> getOutputBlock (int index)

Get a regular output block.

public List<BasicBlock<InsnType>> getOutputBlocks ()

Get the regular output blocks.

Returns
  • a copy of the list of regular output blocks

public int insize ()

Get the number of regular input edges to this block.

public int irrinsize ()

Get the number of irregular input edges from this node.

public int irroutsize ()

Get the number of irregular output edges from this node.

public boolean isEmpty ()

Determine if the block has 0 instruction.

public boolean isInfiniteLoop ()

Check if the block has a single regular out-edge which points to itself.

public boolean isSelfReferencing ()

Check if the block has at least one regular out-edge pointing to itself.

public int outsize ()

Get the number of regular output edges from this node.

public boolean remove (int index)

DANGEROUS! Remove an instruction from the block.

This method may have the nasty side-effect of making the block empty. In that case, it returns true, and it is the caller's responsibility to refresh the CFG at their earliest convenience.

Another issue the client needs to take care of is the removal of the last instruction, which should only happen on very specific conditions, since the trailing instruction typically conditions the out-edges of the block.

Returns
  • true if the CFG need refreshing

public int size ()

Get the number of instructions in the block.

public String toString ()