Package de.uzl.its.swat.symbolic
Class SymbolicInstructionVisitor
java.lang.Object
de.uzl.its.swat.symbolic.SymbolicInstructionVisitor
- All Implemented Interfaces:
- IVisitor
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionbooleancheckArrayBounds(Value<?, ?> ref, IntValue idx, int iid) intdetermineIid(int iid) getStack()voidsetNext(Instruction next) voidvisitAALOAD(AALOAD inst) Loads a reference from an array and stores the reference on the symbolic stack ToDo (Nils): Reference arrays are not symbolically tracked currently See: ...voidvisitAASTORE(AASTORE inst) Stores a reference value into an arrayvoidvisitACONST_NULL(ACONST_NULL inst) Pushes NULL onto the symbolic stackvoidvisitALOAD(ALOAD inst) Fetches a reference from the symbolic locals and puts it onto the symbolic stackvoidvisitANEWARRAY(ANEWARRAY inst) Creates a new array of references and puts the array onto the symbolic stack.voidvisitARETURN(ARETURN inst) Takes the top value (has to be a reference) from the symbolic stack and sets it as the symbolic return valuevoidvisitARRAYLENGTH(ARRAYLENGTH inst) Determines the size of an array and puts it onto the symbolic stack INFO: While the length is tracked symbolically it is currently unclear to what effect that is useful See: IssuevoidvisitASTORE(ASTORE inst) Stores the top reference from the symbolic stack into the symbolic locals.voidvisitATHROW(ATHROW inst) Throws an error or exception in the symbolic frame.voidvisitBALOAD(BALOAD inst) Retrieves a boolean or byte from an array and puts it onto the symbolic stackvoidvisitBASTORE(BASTORE inst) Stores a boolean or byte into an arrayvoidvisitBIPUSH(BIPUSH inst) Pushes a byte onto the symbolic stack as an integervoidvisitCALOAD(CALOAD inst) Retrieves a char from an array and puts it onto the symbolic stackvoidvisitCASTORE(CASTORE inst) Stores a char into an arrayvoidvisitCHECKCAST(CHECKCAST inst) No symbolic tracking needed here.voidCasts a double value to a float and puts the result onto the symbolic stackvoidCasts a double to an integer and puts the int onto the symbolic stackvoidCasts a double to a long and puts the long onto the symbolic stackvoidAdds two doubles and pushes the result onto the symbolic stackvoidvisitDALOAD(DALOAD inst) Retrieves a double from an array and puts it onto the symbolic stackvoidvisitDASTORE(DASTORE inst) Stores a double into an arrayvoidvisitDCMPG(DCMPG inst) Compares two doubles and encodes the result as an integer that is put onto the symbolic stackvoidvisitDCMPL(DCMPL inst) Compares two doubles and encodes the result as an integer that is put onto the symbolic stackvoidvisitDCONST_0(DCONST_0 inst) Loads the constant 0.0 onto the symbolic stackvoidvisitDCONST_1(DCONST_1 inst) Loads the constant 1.0 onto the symbolic stackvoidDivides two doubles and pushes the result onto the symbolic stackvoidvisitDLOAD(DLOAD inst) Loads a double from the symbolic locals onto the symbolic stack.voidMultiplies two doubles and pushes the result onto the symbolic stackvoidNegates a double and pushes the result onto the symbolic stackvoidvoidvisitDRETURN(DRETURN inst) Sets the return value of the current symbolic frame to the double value on top of the symbolic stackvoidvisitDSTORE(DSTORE inst) Stores the top value from the symbolic stack (double) into a slot in the symbolic localsvoidSubtracts two doubles and pushes the result onto the symbolic stackvoidDuplicates the top value on the symbolic stack (only one word -> 8 bytes) | 1 | --> | 1 | | 1 |voidvisitDUP_X1(DUP_X1 inst) Duplicate the top word and insert it beneath a second word | 1 | | 1 | | 2 | --> | 2 | | 1 |voidvisitDUP_X2(DUP_X2 inst) Duplicate the top word and insert it beneath the third word | 1 | | 1 | | 2 | --> | 2 | | 3 | | 3 | | 1 |voidDuplicates the top value on the symbolic stack (two words -> 16 bytes) | 1 | | 1 | | 2 | --> | 2 | | 1 | | 2 |voidvisitDUP2_X1(DUP2_X1 inst) Duplicate two words and insert them beneath a third word | 1 | | 1 | | 2 | --> | 2 | | 3 | | 3 | | 1 | | 2 |voidvisitDUP2_X2(DUP2_X2 inst) Duplicate two words and insert them beneath a fourth word | 1 | | 1 | | 2 | --> | 2 | | 3 | | 3 | | 4 | | 4 | | 1 | | 2 |voidCasts a float to a double and puts the result onto the symbolic stackvoidCasts a float to an integer and puts the result onto the symbolic stackvoidvoidAdds two floats and adds the result onto the symbolic stackvoidvisitFALOAD(FALOAD inst) Loads a float from an array and puts it onto the symbolic stackvoidvisitFASTORE(FASTORE inst) Stores a float into an arrayvoidvisitFCMPG(FCMPG inst) Compares two floats and encodes the result as an integer that is put onto the symbolic stackvoidvisitFCMPL(FCMPL inst) Compares two floats and encodes the result as an integer that is put onto the symbolic stackvoidvisitFCONST_0(FCONST_0 inst) Loads the constant 0.0f as a float onto the symbolic stackvoidvisitFCONST_1(FCONST_1 inst) Loads the constant 1.0f as a float onto the symbolic stackvoidvisitFCONST_2(FCONST_2 inst) Loads the constant 2.0f as a float onto the symbolic stackvoidDivides two floats and puts the result onto the symbolic stackvoidvisitFLOAD(FLOAD inst) Loads a float from the symbolic locals onto the symbolic stackvoidMultiplies two floats and puts the result onto the symbolic stackvoidNegates a float and puts the result onto the symbolic stackvoidCalculates the remaider of the divion of two flaots and puts the result onto the symbolic stack WARNING: This is currently only the concrete valuevoidvisitFRETURN(FRETURN inst) Sets the return value of the current symbolic frame to the float value on top of the symbolic stackvoidvisitFSTORE(FSTORE inst) Puts the float on top of the symbolic stack into one of the symbolic locals of the current framevoidSubtracts two floats and puts the resulting FloatValuer onto the symbolic stack.voidvisitGETFIELD(GETFIELD inst) Fetches a field from an object instance and puts it onto the symbolic stackvoidvisitGETSTATIC(GETSTATIC inst) Fetches a static field from an object and puts it onto the symbolic stackvoidArtificial instruction used to fetch concrete boolean valuesvoidArtificial instruction used to fetch concrete valuesvoidArtificial instruction used to fetch concrete valuesvoidArtificial instruction used to fetch concrete valuesvoidArtificial instruction used to fetch concrete valuesvoidArtificial instruction used to fetch concrete valuesvoidArtificial instruction used to fetch concrete valuesvoidvisitGETVALUE_Object(GETVALUE_Object<?> inst) voidArtificial instruction used to fetch concrete valuesvoidvoidNo symbolic tracking needed for the uncoditional jump.voidConverts an integer to a byte and puts the result onto the symbolic stackvoidConverts an integer to a char and puts the result onto the symbolic stack ToDo (Nils): Symbolic information regarding the integer is currently lost here! See: Issue 60voidConverts an integer to a double and puts the result onto the symbolic stackvoidConverts an integer to a float and puts the result onto the symbolic stackvoidConverts an integer to a long and puts the result onto the symbolic stackvoidConverts an integer to a short and puts the result onto the symbolic stackvoidAdds two integers and pushes the result onto the symbolic stackvoidvisitIALOAD(IALOAD inst) Loads an integer from an array and puts it onto the symbolic stackvoidCalculates the bitwise and of two integers in binary representation and puts the result onto the symbolic stackvoidvisitIASTORE(IASTORE inst) Stores an integer into an arrayvoidvisitICONST_0(ICONST_0 inst) Load the int value 0 onto the symbolic stackvoidvisitICONST_1(ICONST_1 inst) Load the int value 1 onto the symbolic stackvoidvisitICONST_2(ICONST_2 inst) Load the int value 2 onto the symbolic stackvoidvisitICONST_3(ICONST_3 inst) Load the int value 3 onto the symbolic stackvoidvisitICONST_4(ICONST_4 inst) Load the int value 4 onto the symbolic stackvoidvisitICONST_5(ICONST_5 inst) Load the int value 5 onto the symbolic stackvoidvisitICONST_M1(ICONST_M1 inst) Load the int value -1 onto the symbolic stackvoidDivides two integers and puts the result onto the symbolic stack.voidvisitIF_ACMPEQ(IF_ACMPEQ inst) Checks if two object references are equal and saves the resulting symbolic formula as a path constraintvoidvisitIF_ACMPNE(IF_ACMPNE inst) Checks if two object references are not equal and saves the resulting symbolic formula as a path constraintvoidvisitIF_ICMPEQ(IF_ICMPEQ inst) Checks if the two integers are equalvoidvisitIF_ICMPGE(IF_ICMPGE inst) Checks if the integer is greater or equal to the second integervoidvisitIF_ICMPGT(IF_ICMPGT inst) Checks if the integer is greater than the second integervoidvisitIF_ICMPLE(IF_ICMPLE inst) Checks if the integer is less than or equal to the second integervoidvisitIF_ICMPLT(IF_ICMPLT inst) Checks if the integer is greater than the second integervoidvisitIF_ICMPNE(IF_ICMPNE inst) Checks if the wo integers are not equalvoidBranches if the top value on the stack is equal to 0voidBranches if the top value on the stack is greater or equal to 0voidBranches if the top value on the stack is greater then 0voidBranches if the top value on the stack is less or equal to 0voidBranches if the top value on the stack is less then 0voidChecks if the current Value is not equal to 0voidvisitIFNONNULL(IFNONNULL inst) Checks if an object is not null and saves the resulting symbolic formula as a path constraintvoidvisitIFNULL(IFNULL inst) Checks if an object is null and saves the resulting symbolic formula as a path constraintvoidIncrements an integer that is in the locals.voidvisitILOAD(ILOAD inst) Loads an integer from the locals onto the stack After this instruction a GETVALUE_int instruction follows to fetch the concrete value if the sybolic locals did not contain the valuevoidMultiplies two integers and adds the result onto the symbolic stackvoidNegates an integer and puts the resulting value onto the symbolic stackvoidvisitINSTANCEOF(INSTANCEOF inst) Removes the object reference from the symbolic stack and pushes true onto the symbolic stack.voidInvokes a dynamic methodvoidInvokes an interface method on an object reference from the symbolic stackvoidRemoves a frame from the stack frame and puts the removed frame's return value onto the old (current) frame's stackvoidvoidInvokes an instance method on an object reference from the symbolic stackvoidInvokes a static methodvoidInvokes a virtual method on an object reference from the symbolic stackvoidCalculates the bitwise OR of two integers and puts the result onto the symbolic stackvoidCalculates the modulo of two integers and puts the result onto the symbolic stackvoidvisitIRETURN(IRETURN inst) Sets the return value of the current symbolic frame to the int value on top of the symbolic stackvoidShifts an integer bitwise to the left and puts the result onto the symbolic stackvoidShifts an integer bitwise arithmetically to the right and puts the result onto the symbolic stackvoidvisitISTORE(ISTORE inst) Puts an integer from the symbolic stack into the symbolic localsvoidSubtracts two ints and puts the result onto the symbolic stackvoidvisitIUSHR(IUSHR inst) Shifts an integer bitwise logically to the right and puts the result onto the symbolic stackvoidCalculates the bitwise exclusive OR of two integers and puts the result onto the symbolic stackvoidJump subroutine.voidvoidvoidvoidAdds two longs and adds the result onto the symbolic stackvoidvisitLALOAD(LALOAD inst) Loads a long from an array and puts it onto the symbolic stackvoidCalculates the bitwise and of two longs in binary representation and puts the resulting long onto the stackvoidvisitLASTORE(LASTORE inst) Stores a long into an arrayvoidCompares two longs and adds the result encoded as an integer onto the symbolic stackvoidvisitLCONST_0(LCONST_0 inst) Puts the constant 0L as a long onto the symbolic stackvoidvisitLCONST_1(LCONST_1 inst) Puts the constant 1L as a long onto the symbolic stackvoidvisitLDC_double(LDC_double inst) Puts a constant double onto the symbolic stackvoidvisitLDC_float(LDC_float inst) Puts a constant float onto the symbolic stackvoidvisitLDC_int(LDC_int inst) Loads a constant int onto the symbolic stackvoidvisitLDC_long(LDC_long inst) Loads a constant long onto the symbolic stackvoidvisitLDC_Object(LDC_Object inst) Puts an object onto the symbolic stackvoidvisitLDC_String(LDC_String inst) Puts a constant string onto the symbolic stackvoidDivides two longs and puts the result onto the symbolic stackvoidvisitLLOAD(LLOAD inst) Loads a long from the symbolic locals and adds it to the symbolic stackvoidMultiplies two longs and puts the result onto the symbolic stackvoidNegates a long and puts the result onto the symbolic stackvoidBuilds a path-constraint based on where the execution continues.voidvisitLOOP_BEGIN(LOOP_BEGIN inst) voidvisitLOOP_END(LOOP_END inst) voidCalculates the bitwise or of two longs and puts the result onto the symbolic stackvoidCalculates the modulo of two longs and puts the result onto the symbolic stackvoidvisitLRETURN(LRETURN inst) Sets the return value of the current symbolic frame to the long value on top of the symbolic stackvoidCalculates the bitwise left shift of a long and puts the result onto the symbolic stackvoidCalculates the bitwise right shift of a long and puts the result onto the symbolic stackvoidvisitLSTORE(LSTORE inst) Stores the top value from the symbolic stack (long) into a slot in the symbolic localsvoidSubtracts two longs and puts the result onto the symbolic stackvoidvisitLUSHR(LUSHR inst) Calculates the bitwise logical right shift of a long and puts the result onto the symbolic stackvoidCalculates the bitwise exclusive or of two longs and puts the result onto the symbolic stackvoidvoidNo symbolic behaviour defined.voidvisitMONITOREXIT(MONITOREXIT inst) No symbolic behaviour defined.voidCreates a multidimensional array of references.voidvoidvisitNEWARRAY(NEWARRAY inst) voidNothing to do here ;DvoidPops the top value from the symbolic stack.voidPops the top two values from the symbolic stack.voidvisitPUTFIELD(PUTFIELD inst) Puts a value into the field of an object reference The handling has changed in the JVM: - SE11 (new) - SE7 (Old)voidvisitPUTSTATIC(PUTSTATIC inst) Puts a value into a static field of a classvoidUnconditional jump no handling neededvoidvisitRETURN(RETURN inst) Returns void from method, no handling needed (here)voidvisitSALOAD(SALOAD inst) Retrieves a short from an array and puts it onto the symbolic stackvoidvisitSASTORE(SASTORE inst) Stores a short into an arrayvoidvisitSIPUSH(SIPUSH inst) Pushes a short onto the symbolic stack as an integervoidvisitSPECIAL(SPECIAL inst) voidSwaps the top two words on the symbolic stackvoidvisitTABLESWITCH(TABLESWITCH inst) Builds a path-constraint based on where the execution continues.
- 
Constructor Details- 
SymbolicInstructionVisitor
 
- 
- 
Method Details- 
checkArrayBounds
- 
visitAALOADLoads a reference from an array and stores the reference on the symbolic stack ToDo (Nils): Reference arrays are not symbolically tracked currently See: ...- Specified by:
- visitAALOADin interface- IVisitor
- Parameters:
- inst- The AALOAD instruction
 
- 
visitAASTOREStores a reference value into an array- Specified by:
- visitAASTOREin interface- IVisitor
- Parameters:
- inst- The ASTORE instruction
 
- 
visitACONST_NULLPushes NULL onto the symbolic stack- Specified by:
- visitACONST_NULLin interface- IVisitor
- Parameters:
- inst- The ACONST_NULL instruction
 
- 
visitALOADFetches a reference from the symbolic locals and puts it onto the symbolic stack- Specified by:
- visitALOADin interface- IVisitor
- Parameters:
- inst- One on the ALOAD (ALOAD, ALOAD_0 - ALOAD_3) instructions
 
- 
visitANEWARRAYCreates a new array of references and puts the array onto the symbolic stack.- Specified by:
- visitANEWARRAYin interface- IVisitor
- Parameters:
- inst- The ANEWARRAY instruction.
 
- 
visitARETURNTakes the top value (has to be a reference) from the symbolic stack and sets it as the symbolic return value- Specified by:
- visitARETURNin interface- IVisitor
- Parameters:
- inst- The ARETURN instruction
 
- 
visitARRAYLENGTHDetermines the size of an array and puts it onto the symbolic stack INFO: While the length is tracked symbolically it is currently unclear to what effect that is useful See: Issue- Specified by:
- visitARRAYLENGTHin interface- IVisitor
- Parameters:
- inst- The ARRAYLENGTH instruction
 
- 
visitASTOREStores the top reference from the symbolic stack into the symbolic locals. The index of the locals position is indicated by the instruction and not taken from the stack- Specified by:
- visitASTOREin interface- IVisitor
- Parameters:
- inst- One of the ASTORE (ASTORE, ASTORE_0 - ASTORE_3) instructions. inst.var is the locals index
 
- 
visitATHROWThrows an error or exception in the symbolic frame. The symbolic stack is cleared and only a reference to the exception remains on the symbolic stack. ToDo (Nils): Could some information be saved here to record that an exception has occurred? See: ...- Specified by:
- visitATHROWin interface- IVisitor
- Parameters:
- inst- The ATHROW instruction
 
- 
visitBALOADRetrieves a boolean or byte from an array and puts it onto the symbolic stack- Specified by:
- visitBALOADin interface- IVisitor
- Parameters:
- inst- The BALOAD instruction.
 
- 
visitBASTOREStores a boolean or byte into an array- Specified by:
- visitBASTOREin interface- IVisitor
- Parameters:
- inst- The BASTORE instruction.
 
- 
visitBIPUSHPushes a byte onto the symbolic stack as an integer- Specified by:
- visitBIPUSHin interface- IVisitor
- Parameters:
- inst- The BIPUSH instruction
 
- 
visitCALOADRetrieves a char from an array and puts it onto the symbolic stack- Specified by:
- visitCALOADin interface- IVisitor
- Parameters:
- inst- The CALOAD instruction.
 
- 
visitCASTOREStores a char into an array- Specified by:
- visitCASTOREin interface- IVisitor
- Parameters:
- inst- The CASTORE instruction.
 
- 
visitCHECKCASTNo symbolic tracking needed here. Exceptions in case the object cannot be cast need to be caught.- Specified by:
- visitCHECKCASTin interface- IVisitor
- Parameters:
- inst- The CHECKCAST instruction
 
- 
visitD2FCasts a double value to a float and puts the result onto the symbolic stack
- 
visitD2ICasts a double to an integer and puts the int onto the symbolic stack
- 
visitD2LCasts a double to a long and puts the long onto the symbolic stack
- 
visitDADDAdds two doubles and pushes the result onto the symbolic stack
- 
visitDALOADRetrieves a double from an array and puts it onto the symbolic stack- Specified by:
- visitDALOADin interface- IVisitor
- Parameters:
- inst- The DALOAD instruction.
 
- 
visitDASTOREStores a double into an array- Specified by:
- visitDASTOREin interface- IVisitor
- Parameters:
- inst- The DASTORE instruction.
 
- 
visitDCMPGCompares two doubles and encodes the result as an integer that is put onto the symbolic stack- Specified by:
- visitDCMPGin interface- IVisitor
- Parameters:
- inst- The DCMPG instruction
 
- 
visitDCMPLCompares two doubles and encodes the result as an integer that is put onto the symbolic stack- Specified by:
- visitDCMPLin interface- IVisitor
- Parameters:
- inst- The DCMPL instruction
 
- 
visitDCONST_0Loads the constant 0.0 onto the symbolic stack- Specified by:
- visitDCONST_0in interface- IVisitor
- Parameters:
- inst- The DCONST_0 instruction
 
- 
visitDCONST_1Loads the constant 1.0 onto the symbolic stack- Specified by:
- visitDCONST_1in interface- IVisitor
- Parameters:
- inst- The DCONST_1 instruction
 
- 
visitDDIVDivides two doubles and pushes the result onto the symbolic stack
- 
visitDLOADLoads a double from the symbolic locals onto the symbolic stack.- Specified by:
- visitDLOADin interface- IVisitor
- Parameters:
- inst- One of the DLOAD instructions (DLOAD, DLOAD_0 - DLOAD_3)
 
- 
visitDMULMultiplies two doubles and pushes the result onto the symbolic stack
- 
visitDNEGNegates a double and pushes the result onto the symbolic stack
- 
visitDREM
- 
visitDRETURNSets the return value of the current symbolic frame to the double value on top of the symbolic stack- Specified by:
- visitDRETURNin interface- IVisitor
- Parameters:
- inst- The DRETURN instruction
 
- 
visitDSTOREStores the top value from the symbolic stack (double) into a slot in the symbolic locals- Specified by:
- visitDSTOREin interface- IVisitor
- Parameters:
- inst- One of the DSTORE instructions (DSTORE, DSTORE_0 - DSTORE_3)
 
- 
visitDSUBSubtracts two doubles and pushes the result onto the symbolic stack
- 
visitDUPDuplicates the top value on the symbolic stack (only one word -> 8 bytes) | 1 | --> | 1 | | 1 |
- 
visitDUP2Duplicates the top value on the symbolic stack (two words -> 16 bytes) | 1 | | 1 | | 2 | --> | 2 | | 1 | | 2 |
- 
visitDUP2_X1Duplicate two words and insert them beneath a third word | 1 | | 1 | | 2 | --> | 2 | | 3 | | 3 | | 1 | | 2 |- Specified by:
- visitDUP2_X1in interface- IVisitor
- Parameters:
- inst- The DUP2_X1 instruction
 
- 
visitDUP2_X2Duplicate two words and insert them beneath a fourth word | 1 | | 1 | | 2 | --> | 2 | | 3 | | 3 | | 4 | | 4 | | 1 | | 2 |- Specified by:
- visitDUP2_X2in interface- IVisitor
- Parameters:
- inst- The DUP2_X2 instruction
 
- 
visitDUP_X1Duplicate the top word and insert it beneath a second word | 1 | | 1 | | 2 | --> | 2 | | 1 |- Specified by:
- visitDUP_X1in interface- IVisitor
- Parameters:
- inst- The DUP2_X1 instruction
 
- 
visitDUP_X2Duplicate the top word and insert it beneath the third word | 1 | | 1 | | 2 | --> | 2 | | 3 | | 3 | | 1 |- Specified by:
- visitDUP_X2in interface- IVisitor
- Parameters:
- inst- The DUP2_X1 instruction
 
- 
visitF2DCasts a float to a double and puts the result onto the symbolic stack
- 
visitF2ICasts a float to an integer and puts the result onto the symbolic stack
- 
visitF2L
- 
visitFADDAdds two floats and adds the result onto the symbolic stack
- 
visitFALOADLoads a float from an array and puts it onto the symbolic stack- Specified by:
- visitFALOADin interface- IVisitor
- Parameters:
- inst- The FALOAD instruction
 
- 
visitFASTOREStores a float into an array- Specified by:
- visitFASTOREin interface- IVisitor
- Parameters:
- inst- The FASTORE instruction
 
- 
visitFCMPGCompares two floats and encodes the result as an integer that is put onto the symbolic stack- Specified by:
- visitFCMPGin interface- IVisitor
- Parameters:
- inst- The FCMPG instruction
 
- 
visitFCMPLCompares two floats and encodes the result as an integer that is put onto the symbolic stack- Specified by:
- visitFCMPLin interface- IVisitor
- Parameters:
- inst- The FCMPL instruction
 
- 
visitFCONST_0Loads the constant 0.0f as a float onto the symbolic stack- Specified by:
- visitFCONST_0in interface- IVisitor
- Parameters:
- inst- The FCONST_0 instruction
 
- 
visitFCONST_1Loads the constant 1.0f as a float onto the symbolic stack- Specified by:
- visitFCONST_1in interface- IVisitor
- Parameters:
- inst- The FCONST_1 instruction
 
- 
visitFCONST_2Loads the constant 2.0f as a float onto the symbolic stack- Specified by:
- visitFCONST_2in interface- IVisitor
- Parameters:
- inst- The FCONST_2 instruction
 
- 
visitFDIVDivides two floats and puts the result onto the symbolic stack
- 
visitFLOADLoads a float from the symbolic locals onto the symbolic stack- Specified by:
- visitFLOADin interface- IVisitor
- Parameters:
- inst- One of the FLOAD instructions (FLOAD, FLOAD_0 - FLOAD_3)
 
- 
visitFMULMultiplies two floats and puts the result onto the symbolic stack
- 
visitFNEGNegates a float and puts the result onto the symbolic stack
- 
visitFREMCalculates the remaider of the divion of two flaots and puts the result onto the symbolic stack WARNING: This is currently only the concrete value
- 
visitFRETURNSets the return value of the current symbolic frame to the float value on top of the symbolic stack- Specified by:
- visitFRETURNin interface- IVisitor
- Parameters:
- inst- The FRETURN instruction
 
- 
visitFSTOREPuts the float on top of the symbolic stack into one of the symbolic locals of the current frame- Specified by:
- visitFSTOREin interface- IVisitor
- Parameters:
- inst- One of the FSTORE instructions (FSTORE, FSTORE_0 - FSTORE_3)
 
- 
visitFSUBSubtracts two floats and puts the resulting FloatValuer onto the symbolic stack.
- 
visitGETFIELDFetches a field from an object instance and puts it onto the symbolic stack- Specified by:
- visitGETFIELDin interface- IVisitor
- Parameters:
- inst- The GETFIELD instruction
 
- 
visitGETSTATICFetches a static field from an object and puts it onto the symbolic stack- Specified by:
- visitGETSTATICin interface- IVisitor
- Parameters:
- inst- The GETSTATIC instruction
 
- 
visitGETVALUE_Object- Specified by:
- visitGETVALUE_Objectin interface- IVisitor
 
- 
visitGETVALUE_booleanArtificial instruction used to fetch concrete boolean values- Specified by:
- visitGETVALUE_booleanin interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_boolean instruction
 
- 
visitGETVALUE_byteArtificial instruction used to fetch concrete values- Specified by:
- visitGETVALUE_bytein interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_byte instruction
 
- 
visitGETVALUE_charArtificial instruction used to fetch concrete values- Specified by:
- visitGETVALUE_charin interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_char instruction
 
- 
visitGETVALUE_doubleArtificial instruction used to fetch concrete values- Specified by:
- visitGETVALUE_doublein interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_double instruction
 
- 
visitGETVALUE_floatArtificial instruction used to fetch concrete values- Specified by:
- visitGETVALUE_floatin interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_float instruction
 
- 
visitGETVALUE_intArtificial instruction used to fetch concrete values- Specified by:
- visitGETVALUE_intin interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_int instruction
 
- 
visitGETVALUE_longArtificial instruction used to fetch concrete values- Specified by:
- visitGETVALUE_longin interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_long instruction
 
- 
visitGETVALUE_shortArtificial instruction used to fetch concrete values- Specified by:
- visitGETVALUE_shortin interface- IVisitor
- Parameters:
- inst- The (artificial) GETVALUE_short instruction
 
- 
visitGETVALUE_void- Specified by:
- visitGETVALUE_voidin interface- IVisitor
 
- 
visitGOTONo symbolic tracking needed for the uncoditional jump.
- 
visitI2BConverts an integer to a byte and puts the result onto the symbolic stack
- 
visitI2CConverts an integer to a char and puts the result onto the symbolic stack ToDo (Nils): Symbolic information regarding the integer is currently lost here! See: Issue 60
- 
visitI2DConverts an integer to a double and puts the result onto the symbolic stack
- 
visitI2FConverts an integer to a float and puts the result onto the symbolic stack
- 
visitI2LConverts an integer to a long and puts the result onto the symbolic stack
- 
visitI2SConverts an integer to a short and puts the result onto the symbolic stack
- 
visitIADDAdds two integers and pushes the result onto the symbolic stack
- 
visitIALOADLoads an integer from an array and puts it onto the symbolic stack- Specified by:
- visitIALOADin interface- IVisitor
- Parameters:
- inst- The IALOAD instruction
 
- 
visitIANDCalculates the bitwise and of two integers in binary representation and puts the result onto the symbolic stack
- 
visitIASTOREStores an integer into an array- Specified by:
- visitIASTOREin interface- IVisitor
- Parameters:
- inst- The IASTORE instruction
 
- 
visitICONST_0Load the int value 0 onto the symbolic stack- Specified by:
- visitICONST_0in interface- IVisitor
- Parameters:
- inst- Current instruction
 
- 
visitICONST_1Load the int value 1 onto the symbolic stack- Specified by:
- visitICONST_1in interface- IVisitor
- Parameters:
- inst- Current instruction
 
- 
visitICONST_2Load the int value 2 onto the symbolic stack- Specified by:
- visitICONST_2in interface- IVisitor
- Parameters:
- inst- Current instruction
 
- 
visitICONST_3Load the int value 3 onto the symbolic stack- Specified by:
- visitICONST_3in interface- IVisitor
- Parameters:
- inst- Current instruction
 
- 
visitICONST_4Load the int value 4 onto the symbolic stack- Specified by:
- visitICONST_4in interface- IVisitor
- Parameters:
- inst- Current instruction
 
- 
visitICONST_5Load the int value 5 onto the symbolic stack- Specified by:
- visitICONST_5in interface- IVisitor
- Parameters:
- inst- Current instruction
 
- 
visitICONST_M1Load the int value -1 onto the symbolic stack- Specified by:
- visitICONST_M1in interface- IVisitor
- Parameters:
- inst- Current ICONST_M1 instruction
 
- 
visitIDIVDivides two integers and puts the result onto the symbolic stack.
- 
visitIFEQBranches if the top value on the stack is equal to 0
- 
visitIFGEBranches if the top value on the stack is greater or equal to 0
- 
visitIFGTBranches if the top value on the stack is greater then 0
- 
visitIFLEBranches if the top value on the stack is less or equal to 0
- 
visitIFLTBranches if the top value on the stack is less then 0
- 
visitIFNEChecks if the current Value is not equal to 0
- 
visitIFNONNULLChecks if an object is not null and saves the resulting symbolic formula as a path constraint- Specified by:
- visitIFNONNULLin interface- IVisitor
- Parameters:
- inst- The IFNONNULL instruction.
 
- 
visitIFNULLChecks if an object is null and saves the resulting symbolic formula as a path constraint- Specified by:
- visitIFNULLin interface- IVisitor
- Parameters:
- inst- The IFNULL instruction.
 
- 
visitIF_ACMPEQChecks if two object references are equal and saves the resulting symbolic formula as a path constraint- Specified by:
- visitIF_ACMPEQin interface- IVisitor
- Parameters:
- inst- The IF_ACMPEQ instruction.
 
- 
visitIF_ACMPNEChecks if two object references are not equal and saves the resulting symbolic formula as a path constraint- Specified by:
- visitIF_ACMPNEin interface- IVisitor
- Parameters:
- inst- The IF_ACMPNE instruction.
 
- 
visitIF_ICMPEQChecks if the two integers are equal- Specified by:
- visitIF_ICMPEQin interface- IVisitor
- Parameters:
- inst- The IF_ICMPEQ instruction
 
- 
determineIidpublic int determineIid(int iid) 
- 
visitIF_ICMPGEChecks if the integer is greater or equal to the second integer- Specified by:
- visitIF_ICMPGEin interface- IVisitor
- Parameters:
- inst- The IF_ICMPGE instruction
 
- 
visitIF_ICMPGTChecks if the integer is greater than the second integer- Specified by:
- visitIF_ICMPGTin interface- IVisitor
- Parameters:
- inst- The IF_ICMPGT instruction
 
- 
visitIF_ICMPLEChecks if the integer is less than or equal to the second integer- Specified by:
- visitIF_ICMPLEin interface- IVisitor
- Parameters:
- inst- The IF_ICMPLE instruction
 
- 
visitIF_ICMPLTChecks if the integer is greater than the second integer- Specified by:
- visitIF_ICMPLTin interface- IVisitor
- Parameters:
- inst- The IF_ICMPLT instruction
 
- 
visitIF_ICMPNEChecks if the wo integers are not equal- Specified by:
- visitIF_ICMPNEin interface- IVisitor
- Parameters:
- inst- The IF_ICMPNE instruction
 
- 
visitIINCIncrements an integer that is in the locals. No change to the symbolic stack
- 
visitILOADLoads an integer from the locals onto the stack After this instruction a GETVALUE_int instruction follows to fetch the concrete value if the sybolic locals did not contain the value- Specified by:
- visitILOADin interface- IVisitor
- Parameters:
- inst- The ILOAD instruction (including ILOAD_0 - ILOAD_3)
 
- 
visitIMULMultiplies two integers and adds the result onto the symbolic stack
- 
visitINEGNegates an integer and puts the resulting value onto the symbolic stack
- 
visitINSTANCEOFRemoves the object reference from the symbolic stack and pushes true onto the symbolic stack. ToDo (Nils): Find a way to push the correct value onto the stack here See: Issue 61- Specified by:
- visitINSTANCEOFin interface- IVisitor
- Parameters:
- inst- The INSTANCEOF instruction.
 
- 
visitINVOKEINTERFACEInvokes an interface method on an object reference from the symbolic stack- Specified by:
- visitINVOKEINTERFACEin interface- IVisitor
- Parameters:
- inst- The INVOKEINTERFACE instruction
 
- 
visitINVOKESPECIALInvokes an instance method on an object reference from the symbolic stack- Specified by:
- visitINVOKESPECIALin interface- IVisitor
- Parameters:
- inst- The INVOKESPECIAL instruction
 
- 
visitINVOKESTATICInvokes a static method- Specified by:
- visitINVOKESTATICin interface- IVisitor
- Parameters:
- inst- The INVOKESTATIC instruction
 
- 
visitINVOKEVIRTUALInvokes a virtual method on an object reference from the symbolic stack- Specified by:
- visitINVOKEVIRTUALin interface- IVisitor
- Parameters:
- inst- The INVOKEVIRTUAL instruction
 
- 
visitINVOKEDYNAMICInvokes a dynamic method- Specified by:
- visitINVOKEDYNAMICin interface- IVisitor
- Parameters:
- inst- The INVOKEDYNAMIC instruction
 
- 
visitIORCalculates the bitwise OR of two integers and puts the result onto the symbolic stack
- 
visitIREMCalculates the modulo of two integers and puts the result onto the symbolic stack
- 
visitIRETURNSets the return value of the current symbolic frame to the int value on top of the symbolic stack- Specified by:
- visitIRETURNin interface- IVisitor
- Parameters:
- inst- The IRETURN instruction
 
- 
visitISHLShifts an integer bitwise to the left and puts the result onto the symbolic stack
- 
visitISHRShifts an integer bitwise arithmetically to the right and puts the result onto the symbolic stack
- 
visitISTOREPuts an integer from the symbolic stack into the symbolic locals- Specified by:
- visitISTOREin interface- IVisitor
- Parameters:
- inst- The ISTORE instruction
 
- 
visitISUBSubtracts two ints and puts the result onto the symbolic stack
- 
visitIUSHRShifts an integer bitwise logically to the right and puts the result onto the symbolic stack- Specified by:
- visitIUSHRin interface- IVisitor
- Parameters:
- inst- The IUSHR instruction
 
- 
visitIXORCalculates the bitwise exclusive OR of two integers and puts the result onto the symbolic stack
- 
visitJSRJump subroutine. No symbolic handling needed. ToDo (Nils): The instruction pushes the return address onto the symbolic stack Should a placeholder be put here? See: Issue 62
- 
visitL2D
- 
visitL2F
- 
visitL2I
- 
visitLADDAdds two longs and adds the result onto the symbolic stack
- 
visitLALOADLoads a long from an array and puts it onto the symbolic stack- Specified by:
- visitLALOADin interface- IVisitor
- Parameters:
- inst- The LALOAD instruction
 
- 
visitLANDCalculates the bitwise and of two longs in binary representation and puts the resulting long onto the stack
- 
visitLASTOREStores a long into an array- Specified by:
- visitLASTOREin interface- IVisitor
- Parameters:
- inst- The LASTORE instruction
 
- 
visitLCMPCompares two longs and adds the result encoded as an integer onto the symbolic stack
- 
visitLCONST_0Puts the constant 0L as a long onto the symbolic stack- Specified by:
- visitLCONST_0in interface- IVisitor
- Parameters:
- inst- The LCONST_0 instruction
 
- 
visitLCONST_1Puts the constant 1L as a long onto the symbolic stack- Specified by:
- visitLCONST_1in interface- IVisitor
- Parameters:
- inst- The LCONST_1 instruction
 
- 
visitLDC_StringPuts a constant string onto the symbolic stack- Specified by:
- visitLDC_Stringin interface- IVisitor
- Parameters:
- inst- The (artificial) LDC_String instruction
 
- 
visitLDC_ObjectPuts an object onto the symbolic stack- Specified by:
- visitLDC_Objectin interface- IVisitor
- Parameters:
- inst- The (artificial) LDC_Object instruction
 
- 
visitLDC_doublePuts a constant double onto the symbolic stack- Specified by:
- visitLDC_doublein interface- IVisitor
- Parameters:
- inst- The (artificial) LDC_double instruction
 
- 
visitLDC_floatPuts a constant float onto the symbolic stack- Specified by:
- visitLDC_floatin interface- IVisitor
- Parameters:
- inst- The (artificial) LDC_float instruction
 
- 
visitLDC_intLoads a constant int onto the symbolic stack- Specified by:
- visitLDC_intin interface- IVisitor
- Parameters:
- inst- The (artificial) LDC_int instruction
 
- 
visitLDC_longLoads a constant long onto the symbolic stack- Specified by:
- visitLDC_longin interface- IVisitor
- Parameters:
- inst- The (artificial) LDC_long instruction
 
- 
visitLDIVDivides two longs and puts the result onto the symbolic stack
- 
visitLLOADLoads a long from the symbolic locals and adds it to the symbolic stack- Specified by:
- visitLLOADin interface- IVisitor
- Parameters:
- inst- One of the LLOAD isntructions (LLOAD, LLOAD_0 - LLOAD_3)
 
- 
visitLMULMultiplies two longs and puts the result onto the symbolic stack
- 
visitLNEGNegates a long and puts the result onto the symbolic stack
- 
visitLORCalculates the bitwise or of two longs and puts the result onto the symbolic stack
- 
visitLREMCalculates the modulo of two longs and puts the result onto the symbolic stack
- 
visitLRETURNSets the return value of the current symbolic frame to the long value on top of the symbolic stack- Specified by:
- visitLRETURNin interface- IVisitor
- Parameters:
- inst- The LRETURN instruction
 
- 
visitLSHLCalculates the bitwise left shift of a long and puts the result onto the symbolic stack
- 
visitLSHRCalculates the bitwise right shift of a long and puts the result onto the symbolic stack
- 
visitLSTOREStores the top value from the symbolic stack (long) into a slot in the symbolic locals- Specified by:
- visitLSTOREin interface- IVisitor
- Parameters:
- inst- One of the LSTORE instructions (LSTORE, LSTORE_0 - LSTORE_3)
 
- 
visitLSUBSubtracts two longs and puts the result onto the symbolic stack
- 
visitLUSHRCalculates the bitwise logical right shift of a long and puts the result onto the symbolic stack- Specified by:
- visitLUSHRin interface- IVisitor
- Parameters:
- inst- The LUSHR instruction
 
- 
visitLXORCalculates the bitwise exclusive or of two longs and puts the result onto the symbolic stack
- 
visitMONITORENTERNo symbolic behaviour defined.- Specified by:
- visitMONITORENTERin interface- IVisitor
- Parameters:
- inst- The MONITORENTER instruction.
 
- 
visitMONITOREXITNo symbolic behaviour defined.- Specified by:
- visitMONITOREXITin interface- IVisitor
- Parameters:
- inst- The MONITOREXIT instruction.
 
- 
visitNEW
- 
visitNEWARRAY- Specified by:
- visitNEWARRAYin interface- IVisitor
 
- 
visitNOPNothing to do here ;D
- 
visitPOPPops the top value from the symbolic stack.
- 
visitPOP2Pops the top two values from the symbolic stack.
- 
visitPUTFIELDPuts a value into the field of an object reference The handling has changed in the JVM: - SE11 (new) - SE7 (Old)- Specified by:
- visitPUTFIELDin interface- IVisitor
- Parameters:
- inst- The PUTFIELD instruction
 
- 
visitPUTSTATICPuts a value into a static field of a class- Specified by:
- visitPUTSTATICin interface- IVisitor
- Parameters:
- inst- The PUTSTATIC instruction
 
- 
visitRETUnconditional jump no handling needed
- 
visitRETURNReturns void from method, no handling needed (here)- Specified by:
- visitRETURNin interface- IVisitor
- Parameters:
- inst- The RETURN instruction
 
- 
visitSALOADRetrieves a short from an array and puts it onto the symbolic stack- Specified by:
- visitSALOADin interface- IVisitor
- Parameters:
- inst- The SALOAD instruction.
 
- 
visitSASTOREStores a short into an array- Specified by:
- visitSASTOREin interface- IVisitor
- Parameters:
- inst- The SASTORE instruction.
 
- 
visitSIPUSHPushes a short onto the symbolic stack as an integer- Specified by:
- visitSIPUSHin interface- IVisitor
- Parameters:
- inst- The SIPUSH instruction
 
- 
visitSWAPSwaps the top two words on the symbolic stack
- 
visitINVOKEMETHOD_EXCEPTION- Specified by:
- visitINVOKEMETHOD_EXCEPTIONin interface- IVisitor
 
- 
visitINVOKEMETHOD_ENDRemoves a frame from the stack frame and puts the removed frame's return value onto the old (current) frame's stack- Specified by:
- visitINVOKEMETHOD_ENDin interface- IVisitor
- Parameters:
- inst- INVOKEMETHOD_END
 
- 
visitMAKE_SYMBOLIC- Specified by:
- visitMAKE_SYMBOLICin interface- IVisitor
 
- 
visitLOOP_BEGIN- Specified by:
- visitLOOP_BEGINin interface- IVisitor
 
- 
visitLOOP_END- Specified by:
- visitLOOP_ENDin interface- IVisitor
 
- 
visitSPECIAL- Specified by:
- visitSPECIALin interface- IVisitor
 
- 
setNext
- 
visitMULTIANEWARRAYCreates a multidimensional array of references. Currently, no symbolic handling here because arrays are not of primitive type? See: Issue 63- Specified by:
- visitMULTIANEWARRAYin interface- IVisitor
- Parameters:
- inst- The MULTIANEWARRAY instruction
 
- 
visitLOOKUPSWITCHBuilds a path-constraint based on where the execution continues. ToDo (Nils): Constraint correctness not verified!- Specified by:
- visitLOOKUPSWITCHin interface- IVisitor
- Parameters:
- inst- The LOOKUPSWITCH instruction.
 
- 
visitTABLESWITCHBuilds a path-constraint based on where the execution continues. ToDo (Nils): Constraint correctness not verified!- Specified by:
- visitTABLESWITCHin interface- IVisitor
- Parameters:
- inst- The TABLESWITCH instruction.
 
- 
getStack
- 
getSymbolicStateHandler
- 
getCurrentFrame
 
-