org.apache.bcel.generic.ALOAD Java Examples
The following examples show how to use
org.apache.bcel.generic.ALOAD.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: JavaBuilder.java From luaj with MIT License | 6 votes |
public void storeLocal(int pc, int slot) { boolean isupval = pi.isUpvalueAssign(pc, slot); int index = findSlotIndex( slot, isupval ); if (isupval) { boolean isupcreate = pi.isUpvalueCreate(pc, slot); if ( isupcreate ) { append(factory.createInvoke(classname, "newupe", TYPE_LOCALUPVALUE, ARG_TYPES_NONE, Constants.INVOKESTATIC)); append(InstructionConstants.DUP); append(new ASTORE(index)); } else { append(new ALOAD(index)); } append(InstructionConstants.SWAP); append(new PUSH(cp, 0)); append(InstructionConstants.SWAP); append(InstructionConstants.AASTORE); } else { append(new ASTORE(index)); } }
Example #2
Source File: CookieFlagsDetector.java From Android_Code_Arbiter with GNU Lesser General Public License v3.0 | 5 votes |
/** * This method is used to track calls made on a specific object. For instance, this could be used to track if "setHttpOnly(true)" * was executed on a specific cookie object. * * This allows the detector to find interchanged calls like this * * Cookie cookie1 = new Cookie("f", "foo"); <- This cookie is unsafe * Cookie cookie2 = new Cookie("b", "bar"); <- This cookie is safe * cookie1.setHttpOnly(false); * cookie2.setHttpOnly(true); * * @param cpg ConstantPoolGen * @param startLocation The Location of the cookie initialization call. * @param objectStackLocation The index of the cookie on the stack. * @param invokeInstruction The instruction we want to detect.s * @return The location of the invoke instruction provided for the cookie at a specific index on the stack. */ private Location getCookieInstructionLocation(ConstantPoolGen cpg, Location startLocation, int objectStackLocation, String invokeInstruction) { Location location = startLocation; InstructionHandle handle = location.getHandle(); int loadedStackValue = 0; // Loop until we find the setSecure call for this cookie while (handle.getNext() != null) { handle = handle.getNext(); Instruction nextInst = handle.getInstruction(); // We check if the index of the cookie used for this invoke is the same as the one provided if (nextInst instanceof ALOAD) { ALOAD loadInst = (ALOAD)nextInst; loadedStackValue = loadInst.getIndex(); } if (nextInst instanceof INVOKEVIRTUAL && loadedStackValue == objectStackLocation) { INVOKEVIRTUAL invoke = (INVOKEVIRTUAL) nextInst; String methodNameWithSignature = invoke.getClassName(cpg) + "." + invoke.getMethodName(cpg); if (methodNameWithSignature.equals(invokeInstruction)) { Integer val = ByteCode.getConstantInt(handle.getPrev()); if (val != null && val == TRUE_INT_VALUE) { return new Location(handle, location.getBasicBlock()); } } } } return null; }
Example #3
Source File: LoadOfKnownNullValue.java From spotbugs with GNU Lesser General Public License v2.1 | 5 votes |
/** * @param classContext * @param nextHandle * @param next */ private boolean isNullTestedClose(ClassContext classContext, ALOAD load, InstructionHandle nextHandle, Instruction next) { if (!(next instanceof IFNULL)) { return false; } IFNULL ifNull = (IFNULL) next; InstructionHandle nextNextHandle = nextHandle.getNext(); // aload if (nextNextHandle == null) { return false; } Instruction nextInstruction = nextNextHandle.getInstruction(); if (!(nextInstruction instanceof ALOAD)) { return false; } ALOAD nextLoad = (ALOAD) nextInstruction; if (load.getIndex() != nextLoad.getIndex()) { return false; } InstructionHandle nextNextNextHandle = nextNextHandle.getNext(); // invoke if (nextNextNextHandle == null) { return false; } Instruction nextNextNextInstruction = nextNextNextHandle.getInstruction(); if (!(nextNextNextInstruction instanceof INVOKEVIRTUAL)) { return false; } INVOKEVIRTUAL invokeVirtual = (INVOKEVIRTUAL) nextNextNextInstruction; String methodName = invokeVirtual.getMethodName(classContext.getConstantPoolGen()); String methodSig = invokeVirtual.getSignature(classContext.getConstantPoolGen()); if (!"close".equals(methodName) || !"()V".equals(methodSig)) { return false; } InstructionHandle nextNextNextNextHandle = nextNextNextHandle.getNext(); // after return ifNull.getTarget() == nextNextNextNextHandle; }
Example #4
Source File: JavaBuilder.java From luaj with MIT License | 5 votes |
public void initializeSlots() { int slot = 0; createUpvalues(-1, 0, p.maxstacksize); if ( superclassType == SUPERTYPE_VARARGS ) { for ( slot=0; slot<p.numparams; slot++ ) { if ( pi.isInitialValueUsed(slot) ) { append(new ALOAD(1)); append(new PUSH(cp, slot+1)); append(factory.createInvoke(STR_VARARGS, "arg", TYPE_LUAVALUE, ARG_TYPES_INT, Constants.INVOKEVIRTUAL)); storeLocal(-1, slot); } } append(new ALOAD(1)); append(new PUSH(cp, 1 + p.numparams)); append(factory.createInvoke(STR_VARARGS, "subargs", TYPE_VARARGS, ARG_TYPES_INT, Constants.INVOKEVIRTUAL)); append(new ASTORE(1)); } else { // fixed arg function between 0 and 3 arguments for ( slot=0; slot<p.numparams; slot++ ) { this.plainSlotVars.put( Integer.valueOf(slot), Integer.valueOf(1+slot) ); if ( pi.isUpvalueCreate(-1, slot) ) { append(new ALOAD(1+slot)); storeLocal(-1, slot); } } } // nil parameters // TODO: remove this for lua 5.2, not needed for ( ; slot<p.maxstacksize; slot++ ) { if ( pi.isInitialValueUsed(slot) ) { loadNil(); storeLocal(-1, slot); } } }
Example #5
Source File: JavaBuilder.java From luaj with MIT License | 5 votes |
public void loadLocal(int pc, int slot) { boolean isupval = pi.isUpvalueRefer(pc, slot); int index = findSlotIndex( slot, isupval ); append(new ALOAD(index)); if (isupval) { append(new PUSH(cp, 0)); append(InstructionConstants.AALOAD); } }
Example #6
Source File: JavaBuilder.java From luaj with MIT License | 5 votes |
public void convertToUpvalue(int pc, int slot) { boolean isupassign = pi.isUpvalueAssign(pc, slot); if ( isupassign ) { int index = findSlotIndex( slot, false ); append(new ALOAD(index)); append(factory.createInvoke(classname, "newupl", TYPE_LOCALUPVALUE, ARG_TYPES_LUAVALUE, Constants.INVOKESTATIC)); int upindex = findSlotIndex( slot, true ); append(new ASTORE(upindex)); } }
Example #7
Source File: JavaBuilder.java From luaj with MIT License | 5 votes |
public void closureInitUpvalueFromLocal(String protoname, int newup, int pc, int srcslot) { boolean isrw = pi.isReadWriteUpvalue( pi.vars[srcslot][pc].upvalue ); Type uptype = isrw? (Type) TYPE_LOCALUPVALUE: (Type) TYPE_LUAVALUE; String destname = upvalueName(newup); int index = findSlotIndex( srcslot, isrw ); append(new ALOAD(index)); append(factory.createFieldAccess(protoname, destname, uptype, Constants.PUTFIELD)); }
Example #8
Source File: Pass3aVerifier.java From commons-bcel with Apache License 2.0 | 5 votes |
/** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitALOAD(final ALOAD o) { final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } } }
Example #9
Source File: JavaBuilder.java From luaj with MIT License | 4 votes |
public void loadVarargs() { append(new ALOAD(1)); }
Example #10
Source File: JavaBuilder.java From luaj with MIT License | 4 votes |
public void loadVarresult() { append(new ALOAD(getVarresultIndex())); }
Example #11
Source File: BCELPerfTest.java From annotation-tools with MIT License | 4 votes |
byte[] counterAdaptClass(final InputStream is, final String name) throws Exception { JavaClass jc = new ClassParser(is, name + ".class").parse(); ClassGen cg = new ClassGen(jc); ConstantPoolGen cp = cg.getConstantPool(); if (!cg.isInterface()) { FieldGen fg = new FieldGen(ACC_PUBLIC, Type.getType("I"), "_counter", cp); cg.addField(fg.getField()); } Method[] ms = cg.getMethods(); for (int j = 0; j < ms.length; ++j) { MethodGen mg = new MethodGen(ms[j], cg.getClassName(), cp); if (!mg.getName().equals("<init>") && !mg.isStatic() && !mg.isAbstract() && !mg.isNative()) { if (mg.getInstructionList() != null) { InstructionList il = new InstructionList(); il.append(new ALOAD(0)); il.append(new ALOAD(0)); il.append(new GETFIELD(cp.addFieldref(name, "_counter", "I"))); il.append(new ICONST(1)); il.append(new IADD()); il.append(new PUTFIELD(cp.addFieldref(name, "_counter", "I"))); mg.getInstructionList().insert(il); mg.setMaxStack(Math.max(mg.getMaxStack(), 2)); boolean lv = ms[j].getLocalVariableTable() == null; boolean ln = ms[j].getLineNumberTable() == null; if (lv) { mg.removeLocalVariables(); } if (ln) { mg.removeLineNumbers(); } cg.replaceMethod(ms[j], mg.getMethod()); } } } return cg.getJavaClass().getBytes(); }
Example #12
Source File: BCELPerfTest.java From annotation-tools with MIT License | 4 votes |
byte[] counterAdaptClass(final InputStream is, final String name) throws Exception { JavaClass jc = new ClassParser(is, name + ".class").parse(); ClassGen cg = new ClassGen(jc); ConstantPoolGen cp = cg.getConstantPool(); if (!cg.isInterface()) { FieldGen fg = new FieldGen(ACC_PUBLIC, Type.getType("I"), "_counter", cp); cg.addField(fg.getField()); } Method[] ms = cg.getMethods(); for (int j = 0; j < ms.length; ++j) { MethodGen mg = new MethodGen(ms[j], cg.getClassName(), cp); if (!mg.getName().equals("<init>") && !mg.isStatic() && !mg.isAbstract() && !mg.isNative()) { if (mg.getInstructionList() != null) { InstructionList il = new InstructionList(); il.append(new ALOAD(0)); il.append(new ALOAD(0)); il.append(new GETFIELD(cp.addFieldref(name, "_counter", "I"))); il.append(new ICONST(1)); il.append(new IADD()); il.append(new PUTFIELD(cp.addFieldref(name, "_counter", "I"))); mg.getInstructionList().insert(il); mg.setMaxStack(Math.max(mg.getMaxStack(), 2)); boolean lv = ms[j].getLocalVariableTable() == null; boolean ln = ms[j].getLineNumberTable() == null; if (lv) { mg.removeLocalVariables(); } if (ln) { mg.removeLineNumbers(); } cg.replaceMethod(ms[j], mg.getMethod()); } } } return cg.getJavaClass().getBytes(); }
Example #13
Source File: ProxyCreator.java From commons-bcel with Apache License 2.0 | 4 votes |
/** * Create JavaClass object for a simple proxy for an java.awt.event.ActionListener * that just prints the passed arguments, load and use it via the class loader * mechanism. */ public static void main(final String[] argv) throws Exception { final ClassLoader loader = ProxyCreator.class.getClassLoader(); // instanceof won't work here ... // TODO this is broken; cannot ever be true now that ClassLoader has been dropped if (loader.getClass().toString().equals("class org.apache.bcel.util.ClassLoader")) { // Real class name will be set by the class loader final ClassGen cg = new ClassGen("foo", "java.lang.Object", "", Constants.ACC_PUBLIC, new String[]{"java.awt.event.ActionListener"}); // That's important, otherwise newInstance() won't work cg.addEmptyConstructor(Constants.ACC_PUBLIC); final InstructionList il = new InstructionList(); final ConstantPoolGen cp = cg.getConstantPool(); final InstructionFactory factory = new InstructionFactory(cg); final int out = cp.addFieldref("java.lang.System", "out", "Ljava/io/PrintStream;"); final int println = cp.addMethodref("java.io.PrintStream", "println", "(Ljava/lang/Object;)V"); final MethodGen mg = new MethodGen(Constants.ACC_PUBLIC, Type.VOID, new Type[]{ new ObjectType("java.awt.event.ActionEvent") }, null, "actionPerformed", "foo", il, cp); // System.out.println("actionPerformed:" + event); il.append(new GETSTATIC(out)); il.append(factory.createNew("java.lang.StringBuffer")); il.append(InstructionConstants.DUP); il.append(new PUSH(cp, "actionPerformed:")); il.append(factory.createInvoke("java.lang.StringBuffer", "<init>", Type.VOID, new Type[]{Type.STRING}, Constants.INVOKESPECIAL)); il.append(new ALOAD(1)); il.append(factory.createAppend(Type.OBJECT)); il.append(new INVOKEVIRTUAL(println)); il.append(InstructionConstants.RETURN); mg.stripAttributes(true); mg.setMaxStack(); mg.setMaxLocals(); cg.addMethod(mg.getMethod()); final byte[] bytes = cg.getJavaClass().getBytes(); System.out.println("Uncompressed class: " + bytes.length); final String s = Utility.encode(bytes, true); System.out.println("Encoded class: " + s.length()); System.out.print("Creating proxy ... "); final ActionListener a = (ActionListener) createProxy("foo.bar.", s); System.out.println("Done. Now calling actionPerformed()"); a.actionPerformed(new ActionEvent(a, ActionEvent.ACTION_PERFORMED, "hello")); } else { System.err.println("Call me with java org.apache.bcel.util.JavaWrapper ProxyCreator"); } }