Class LoopAndroidModel
- Direct Known Subclasses:
LoopKillAndroidModel
Functions are inserted in sequence until ExecutionOrder.START_OF_LOOP is reached. This loop is closed later when AFTER_LOOP gets stepped over.
Functions in MULTIPLE_TIMES_IN_LOOP are in a single inner loop.
This structure may be used to model an Application where no state is kept over the restart of the Application (instance-state) or when the potential restart of the App shall be ignored.
- Author:
- Tobias Blaschke <code@tobiasblaschke.de>
-
Field Summary
Fields inherited from class com.ibm.wala.dalvik.ipa.callgraph.androidModel.structure.AbstractAndroidModel
body, entryPoints, insts, paramManager
-
Constructor Summary
ConstructorDescriptionLoopAndroidModel
(VolatileMethodSummary body, TypeSafeInstructionFactory insts, SSAValueManager paramManager, Iterable<? extends Entrypoint> entryPoints) -
Method Summary
Modifier and TypeMethodDescriptionprotected int
enterAFTER_LOOP
(int PC) Loops to START_OF_LOOP.protected int
enterSTART_OF_LOOP
(int PC) Prepares the PC to get looped to.protected int
leaveAT_LAST
(int PC) Does not insert any special handling.Methods inherited from class com.ibm.wala.dalvik.ipa.callgraph.androidModel.structure.SingleStartAndroidModel
enterEND_OF_LOOP, enterMULTIPLE_TIMES_IN_LOOP
Methods inherited from class com.ibm.wala.dalvik.ipa.callgraph.androidModel.structure.AbstractAndroidModel
enter, enterAT_FIRST, enterAT_LAST, enterBEFORE_LOOP, enterMIDDLE_OF_LOOP, finish, hadSectionSwitch, returnTypesBetween
-
Constructor Details
-
LoopAndroidModel
public LoopAndroidModel(VolatileMethodSummary body, TypeSafeInstructionFactory insts, SSAValueManager paramManager, Iterable<? extends Entrypoint> entryPoints) - Parameters:
body
- The MethodSummary to add instructions toinsts
- Will be used to generate the instructions
-
-
Method Details
-
enterSTART_OF_LOOP
protected int enterSTART_OF_LOOP(int PC) Prepares the PC to get looped to.Thus it tries to assure a new basic block starts here. Additionally it reserves some space for the insertion of Phi-Functions.
Gets called when Label ExecutionOrder.START_OF_LOOP got stepped over.
In most cases you don't want to invoke this function directly but to use
enter(ExecutionOrder.START_OF_LOOP, int)
insteadSideeffects: currentSection is updated, instructions are inserted into the body
- Overrides:
enterSTART_OF_LOOP
in classAbstractAndroidModel
- Parameters:
PC
- Program Counter instructions shall be placed at. In most cases you'll simply pass body.getNextProgramCounter()- Returns:
- Program Counter after insertion of the code
-
enterAFTER_LOOP
protected int enterAFTER_LOOP(int PC) Loops to START_OF_LOOP.It inserts a gotoInstruction and fills the space reserved before with actual PhiInstructions
Gets called when Label ExecutionOrder.AFTER_LOOP got stepped over.
In most cases you don't want to invoke this function directly but to use
enter(ExecutionOrder.AFTER_LOOP, int)
insteadSideeffects: currentSection is updated, instructions are inserted into the body
- Overrides:
enterAFTER_LOOP
in classAbstractAndroidModel
- Parameters:
PC
- Program Counter instructions shall be placed at. In most cases you'll simply pass body.getNextProgramCounter()- Returns:
- Program Counter after insertion of the code
-
leaveAT_LAST
protected int leaveAT_LAST(int PC) Does not insert any special handling.Gets called when the model gets finished.
In most cases you don't want to invoke this function directly but to use
AbstractAndroidModel.finish(int)
insteadSideeffects: instructions are inserted into the body
- Overrides:
leaveAT_LAST
in classAbstractAndroidModel
- Parameters:
PC
- Program Counter instructions shall be placed at. In most cases you'll simply pass body.getNextProgramCounter()- Returns:
- Program Counter after insertion of the code
-