Java 类org.objectweb.asm.Opcodes 实例源码
项目:QDrill
文件:InstructionModifier.java
@Override
public void visitVarInsn(final int opcode, final int var) {
ReplacingBasicValue v;
if (opcode == Opcodes.ASTORE && (v = peekFromTop(0)) != null) {
final ValueHolderSub from = oldToNew.get(v.getIndex());
final ReplacingBasicValue current = getLocal(var);
// if local var is set, then transfer to it to the existing holders in the local position.
if (current != null) {
final ValueHolderSub newSub = oldToNew.get(current.getIndex());
if (newSub.iden() == from.iden()) {
final int targetFirst = newSub.first();
from.transfer(this, targetFirst);
return;
}
}
// if local var is not set, then check map to see if existing holders are mapped to local var.
if (oldLocalToFirst.containsKey(var)) {
final ValueHolderSub sub = oldToNew.get(oldLocalToFirst.lget());
if (sub.iden() == from.iden()) {
// if they are, then transfer to that.
from.transfer(this, sub.first());
return;
}
}
// map from variables to global space for future use.
oldLocalToFirst.put(var, v.getIndex());
return;
} else if (opcode == Opcodes.ALOAD && (v = getLocal(var)) != null) {
/*
* Not forwarding this removes a now unnecessary ALOAD for a holder. The required LOAD/STORE
* sequences will be generated by the ASTORE code above.
*/
return;
}
super.visitVarInsn(opcode, var);
}
项目:DirectLeaks-AntiReleak-Remover
文件:InstructionAdapter.java
@Override
public void visitFieldInsn(final int opcode, final String owner,
final String name, final String desc) {
switch (opcode) {
case Opcodes.GETSTATIC:
getstatic(owner, name, desc);
break;
case Opcodes.PUTSTATIC:
putstatic(owner, name, desc);
break;
case Opcodes.GETFIELD:
getfield(owner, name, desc);
break;
case Opcodes.PUTFIELD:
putfield(owner, name, desc);
break;
default:
throw new IllegalArgumentException();
}
}
项目:MeziLang
文件:ASTCompileVisitor.java
private void throw_compilation(ASTJumpExpr node) throws CompileException {
TContextFunc func_context = getClosestFunContext();
MethodVisitor mv = func_context.getMethodVisitor();
switch (node.jjtGetNumChildren()) {
case 1:
Reduction reduce = this.popReduction();
Debug.assertion(reduce != null, "Invalid Popped Reduction");
Debug.assertion(reduce.isContainer(), "Invalid Popped Reduction " + reduce);
Container throw_cont = (Container) reduce;
Debug.assertion(throw_cont.isTypeInitialized(), "Throw Type is not initialized in the function signature");
LOG.debug("CONT TYPE:" + throw_cont.getType());
Debug.assertion(!throw_cont.isForm(Container.FORM_TYPE), "throw_cont should not be type container");
LOG.debug("ATHROW");
mv.visitInsn(Opcodes.ATHROW);
break;
default:
throw new CompileException("Invalid Throw Expression child");
}
pushReduction(new Control(Control.FORM_THROW));
}
项目:MeziLang
文件:OpInt.java
@Override
public Container smaller(Container lval, Container rvalue, OpInfo opinfo) throws CompileException {
Label greater_equal_label = new Label();
Label end_label = new Label();
opinfo.mv.visitJumpInsn(Opcodes.IF_ICMPGE, greater_equal_label);
opinfo.mv.visitInsn(Opcodes.ICONST_1);
opinfo.mv.visitJumpInsn(Opcodes.GOTO, end_label);
opinfo.mv.visitLabel(greater_equal_label);
opinfo.mv.visitInsn(Opcodes.ICONST_0);
opinfo.mv.visitLabel(end_label);
Container anony_bool = new Container("anonymous", Container.FORM_OPSTACK_VAR, true, false);
anony_bool.initializeType((AbsType) cpLoader.findClassFull(TPrimitiveClass.NAME_BOOL));
anony_bool.setAssigned(true);
return anony_bool;
}
项目:GraphiteMappings
文件:WorldMappings.java
@Override
protected void remap() {
findNode(getObfType().getJvmStandard()).ifPresent((classNode -> classNode.methods.forEach((methodNode -> {
if (methodNode.name.equals("<init>")) {
methodNode.instructions.iterator().forEachRemaining((insnNode) -> {
if (insnNode.getOpcode() == Opcodes.ANEWARRAY) {
if (insnNode instanceof TypeInsnNode) {
TypeInsnNode typeInsnNode = (TypeInsnNode) insnNode;
Type type = Type.getType(typeInsnNode.desc);
getMappings().putClass(type.getInternalName(), "net.minecraft.world" +
".IWorldEventListener");
}
}
});
}
}))));
}
项目:Rubus
文件:MethodImporter.java
/**
* Imports field instructions (put and get), both for static and instance
* fields.
*
* @param opcode Opcode.
* @param owner Class containing the field.
* @param name Name of field.
* @param desc Type descriptor of field.
*/
@Override
public void visitFieldInsn(final int opcode, final String owner, final String name, final String desc) {
Field f = ClassNode.getClass(owner).getField(name, desc);
if(((opcode == Opcodes.GETSTATIC) || (opcode == Opcodes.PUTSTATIC)) !=
f.getModifiers().contains(Modifier.STATIC)) {
throw new RuntimeException("Field staticness conflicts with instruction");
}
switch(opcode) {
// Loads
case Opcodes.GETSTATIC:
case Opcodes.GETFIELD: createFieldRead(f); break;
// Stores
case Opcodes.PUTSTATIC:
case Opcodes.PUTFIELD: createFieldWrite(f); break;
}
}
项目:shrinker
文件:PredicateClassVisitor.java
@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
if (attemptToVisitR) return null;
return new MethodVisitor(Opcodes.ASM5, null) {
@Override
public void visitFieldInsn(int opcode, String owner, String fieldName,
String fieldDesc) {
if (attemptToVisitR
|| opcode != Opcodes.GETSTATIC
|| owner.startsWith("java/lang/")) {
return;
}
attemptToVisitR = isRClass(owner);
}
};
}
项目:Simple-JAR-Watermark
文件:FrameNode.java
/**
* Makes the given visitor visit this stack map frame.
*
* @param mv
* a method visitor.
*/
@Override
public void accept(final MethodVisitor mv) {
switch (type) {
case Opcodes.F_NEW:
case Opcodes.F_FULL:
mv.visitFrame(type, local.size(), asArray(local), stack.size(),
asArray(stack));
break;
case Opcodes.F_APPEND:
mv.visitFrame(type, local.size(), asArray(local), 0, null);
break;
case Opcodes.F_CHOP:
mv.visitFrame(type, local.size(), null, 0, null);
break;
case Opcodes.F_SAME:
mv.visitFrame(type, 0, null, 0, null);
break;
case Opcodes.F_SAME1:
mv.visitFrame(type, 0, null, 1, asArray(stack));
break;
}
}
项目:MeziLang
文件:OpFloat.java
@Override
public Container minus_assign(Container lval, Container rvalue, OpInfo opinfo) throws CompileException {
Container anonyInt = lval.getOpStackClone("anonymous");
//// Compiled Instruction
LOG.info("FSUB");
opinfo.mv.visitInsn(Opcodes.FSUB);
do_assign_common(lval, anonyInt, opinfo);
//// End
return anonyInt;
}
项目:Spigot-Attribute-Remover
文件:AnalyzerAdapter.java
@Override
public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc, final boolean itf) {
if (api < Opcodes.ASM5) {
super.visitMethodInsn(opcode, owner, name, desc, itf);
return;
}
doVisitMethodInsn(opcode, owner, name, desc, itf);
}
项目:DirectLeaks-AntiReleak-Remover
文件:RemappingMethodAdapter.java
@Override
public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc, final boolean itf) {
if (api < Opcodes.ASM5) {
super.visitMethodInsn(opcode, owner, name, desc, itf);
return;
}
doVisitMethodInsn(opcode, owner, name, desc, itf);
}
项目:Spigot-Attribute-Remover
文件:RemappingMethodAdapter.java
@Override
public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc, final boolean itf) {
if (api < Opcodes.ASM5) {
super.visitMethodInsn(opcode, owner, name, desc, itf);
return;
}
doVisitMethodInsn(opcode, owner, name, desc, itf);
}
项目:Rubus
文件:InstructionExporter.java
/**
* Output instructions for allocating arrays, both for primitive and
* reference types.
*
* @param instruction Array allocation instruction.
* @return <code>null</code>
*/
@Override
public Void visit(NewArray instruction) {
if(instruction.getElementType().getSort() == Type.Sort.REF) {
mv.visitTypeInsn(
Opcodes.ANEWARRAY,
instruction.getElementType().getInternalName()
);
} else {
int type;
switch(instruction.getElementType().getSort()) {
case BOOL: type = Opcodes.T_BOOLEAN; break;
case CHAR: type = Opcodes.T_CHAR; break;
case FLOAT: type = Opcodes.T_FLOAT; break;
case DOUBLE: type = Opcodes.T_DOUBLE; break;
case BYTE: type = Opcodes.T_BYTE; break;
case SHORT: type = Opcodes.T_SHORT; break;
case INT: type = Opcodes.T_INT; break;
case LONG: type = Opcodes.T_LONG; break;
default: throw new RuntimeException("Unknown array element type");
}
mv.visitIntInsn(Opcodes.NEWARRAY, type);
}
return null;
}
项目:anvil
文件:XmasCalendarTransformer.java
@Override
public void transform(ClassNode clazz, MethodNode method, InsnMatcher matcher) {
method.instructions.clear();
method.localVariables.clear();
method.tryCatchBlocks.clear();
method.instructions.add(new InsnNode(Opcodes.ICONST_0));
method.instructions.add(new InsnNode(Opcodes.IRETURN));
// TODO adjust maxLocals and maxStack?
}
项目:DirectLeaks-AntiReleak-Remover
文件:InstructionAdapter.java
@Deprecated
public void invokevirtual(final String owner, final String name,
final String desc) {
if (api >= Opcodes.ASM5) {
invokevirtual(owner, name, desc, false);
return;
}
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, owner, name, desc);
}
项目:openrasp
文件:JettyRequestHook.java
@Override
protected MethodVisitor hookMethod(int access, String name, String desc, String signature, String[] exceptions, MethodVisitor mv) {
if ("extractParameters".equals(name) || "extractContentParameters".equals(name)) {
return new AdviceAdapter(Opcodes.ASM5, mv, access, name, desc) {
@Override
protected void onMethodEnter() {
invokeStatic(Type.getType(HookHandler.class),
new Method("onParseParameters", "()V"));
}
};
}
return mv;
}
项目:MeziLang
文件:OpInt.java
@Override
public Container minus(Container lval, Container rvalue, OpInfo opinfo) throws CompileException {
Container anonyInt = lval.getOpStackClone("anonymous");
//// Compiled Instruction
opinfo.mv.visitInsn(Opcodes.ISUB);
LOG.info("ISUB");
// subed result will be on the operand stack
//// End
return anonyInt;
}
项目:MeziLang
文件:OpBool.java
@Override
public void return_dummy_variable(OpInfo opinfo) throws CompileException {
opinfo.mv.visitInsn(Opcodes.ICONST_1);
LOG.info("ICONST_1 for boolean");
opinfo.mv.visitInsn(Opcodes.IRETURN);
LOG.info("IRETURN" + " for Boolean");
}
项目:DirectLeaks-AntiReleak-Remover
文件:GeneratorAdapter.java
/**
* Generates the instruction to push the given value on the stack.
*
* @param value
* the value to be pushed on the stack.
*/
public void push(final double value) {
long bits = Double.doubleToLongBits(value);
if (bits == 0L || bits == 0x3ff0000000000000L) { // +0.0d and 1.0d
mv.visitInsn(Opcodes.DCONST_0 + (int) value);
} else {
mv.visitLdcInsn(value);
}
}
项目:elasticsearch_my
文件:ESLoggerUsageChecker.java
@Override
public BasicValue ternaryOperation(AbstractInsnNode insnNode, BasicValue value1, BasicValue value2, BasicValue value3)
throws AnalyzerException {
if (insnNode.getOpcode() == Opcodes.AASTORE && value1 instanceof ArraySizeBasicValue) {
return value1;
}
return super.ternaryOperation(insnNode, value1, value2, value3);
}
项目:elasticsearch_my
文件:SSubEachArray.java
@Override
void write(MethodWriter writer, Globals globals) {
writer.writeStatementOffset(location);
expression.write(writer, globals);
writer.visitVarInsn(array.type.type.getOpcode(Opcodes.ISTORE), array.getSlot());
writer.push(-1);
writer.visitVarInsn(index.type.type.getOpcode(Opcodes.ISTORE), index.getSlot());
Label begin = new Label();
Label end = new Label();
writer.mark(begin);
writer.visitIincInsn(index.getSlot(), 1);
writer.visitVarInsn(index.type.type.getOpcode(Opcodes.ILOAD), index.getSlot());
writer.visitVarInsn(array.type.type.getOpcode(Opcodes.ILOAD), array.getSlot());
writer.arrayLength();
writer.ifICmp(MethodWriter.GE, end);
writer.visitVarInsn(array.type.type.getOpcode(Opcodes.ILOAD), array.getSlot());
writer.visitVarInsn(index.type.type.getOpcode(Opcodes.ILOAD), index.getSlot());
writer.arrayLoad(indexed.type);
writer.writeCast(cast);
writer.visitVarInsn(variable.type.type.getOpcode(Opcodes.ISTORE), variable.getSlot());
if (loopCounter != null) {
writer.writeLoopCounter(loopCounter.getSlot(), statementCount, location);
}
block.continu = begin;
block.brake = end;
block.write(writer, globals);
writer.goTo(begin);
writer.mark(end);
}
项目:Reer
文件:AsmBackedClassGenerator.java
private void addGetter(String methodName, String methodDescriptor, MethodCodeBody body) throws Exception {
MethodVisitor methodVisitor = visitor.visitMethod(Opcodes.ACC_PUBLIC, methodName, methodDescriptor, null, EMPTY_STRINGS);
methodVisitor.visitCode();
body.add(methodVisitor);
methodVisitor.visitInsn(Opcodes.ARETURN);
methodVisitor.visitMaxs(0, 0);
methodVisitor.visitEnd();
}
项目:DirectLeaks-AntiReleak-Remover
文件:AnalyzerAdapter.java
@Override
public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc, final boolean itf) {
if (api < Opcodes.ASM5) {
super.visitMethodInsn(opcode, owner, name, desc, itf);
return;
}
doVisitMethodInsn(opcode, owner, name, desc, itf);
}
项目:MeziLang
文件:OpInt.java
@Override
public Container shfit_right(Container lval, Container rvalue, OpInfo opinfo) throws CompileException {
Container anonyInt = lval.getOpStackClone("anonymous");
//// Compiled Instruction
LOG.info("ISHR");
opinfo.mv.visitInsn(Opcodes.ISHR);
// subed result will be on the operand stack
//// End
return anonyInt;
}
项目:fastAOP
文件:SAXCodeAdapter.java
@Override
public void visitFrame(final int type, final int nLocal,
final Object[] local, final int nStack, final Object[] stack) {
AttributesImpl attrs = new AttributesImpl();
switch (type) {
case Opcodes.F_NEW:
case Opcodes.F_FULL:
if (type == Opcodes.F_NEW) {
attrs.addAttribute("", "type", "type", "", "NEW");
} else {
attrs.addAttribute("", "type", "type", "", "FULL");
}
sa.addStart("frame", attrs);
appendFrameTypes(true, nLocal, local);
appendFrameTypes(false, nStack, stack);
break;
case Opcodes.F_APPEND:
attrs.addAttribute("", "type", "type", "", "APPEND");
sa.addStart("frame", attrs);
appendFrameTypes(true, nLocal, local);
break;
case Opcodes.F_CHOP:
attrs.addAttribute("", "type", "type", "", "CHOP");
attrs.addAttribute("", "count", "count", "",
Integer.toString(nLocal));
sa.addStart("frame", attrs);
break;
case Opcodes.F_SAME:
attrs.addAttribute("", "type", "type", "", "SAME");
sa.addStart("frame", attrs);
break;
case Opcodes.F_SAME1:
attrs.addAttribute("", "type", "type", "", "SAME1");
sa.addStart("frame", attrs);
appendFrameTypes(false, 1, stack);
break;
}
sa.addEnd("frame");
}
项目:MeziLang
文件:OpInt.java
@Override
public Container multiply_assign(Container lval, Container rvalue, OpInfo opinfo) throws CompileException {
Container anonyInt = lval.getOpStackClone("anonymous");
//// Compiled Instruction
LOG.info("IMUL");
opinfo.mv.visitInsn(Opcodes.IMUL);
do_assign_common(lval, anonyInt, opinfo);
//// End
return anonyInt;
}
项目:Aceso
文件:IntSwitch.java
void writeMissingMessageWithHash(GeneratorAdapter mv, String visitedClassName) {
mv.newInstance(INSTANT_RELOAD_EXCEPTION_TYPE);
mv.dup();
mv.push("int switch could not find %d in %s");
mv.push(3);
mv.newArray(OBJECT_TYPE);
mv.dup();
mv.push(0);
visitInt();
mv.visitMethodInsn(
Opcodes.INVOKESTATIC,
"java/lang/Integer",
"valueOf",
"(I)Ljava/lang/Integer;", false);
mv.arrayStore(OBJECT_TYPE);
mv.dup();
mv.push(2);
mv.push(visitedClassName);
mv.arrayStore(OBJECT_TYPE);
mv.visitMethodInsn(
Opcodes.INVOKESTATIC,
"java/lang/String",
"format",
"(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", false);
mv.invokeConstructor(INSTANT_RELOAD_EXCEPTION_TYPE,
Method.getMethod("void <init> (String)"));
mv.throwException();
}
项目:EvoMaster
文件:HeuristicsForJumpsTest.java
@Test
public void test_IFLE(){
//val <= 0 implies !(-val < 0)
int[] values = new int[]{-2345, -6, 0, 2, 7888};
for(int val: values){
Truthness le = getForSingleValueJump(val, Opcodes.IFLE);
Truthness x = getForSingleValueJump(-val, Opcodes.IFLT).invert();
//their values should be the same, as equivalent
assertEquals(le.getOfTrue(), x.getOfTrue(), 0.001);
assertEquals(le.getOfFalse(), x.getOfFalse(), 0.001);
}
}
项目:MeziLang
文件:OpInt.java
@Override
public Container inclusive_or_assign(Container lval, Container rvalue, OpInfo opinfo) throws CompileException {
Container anonyInt = lval.getOpStackClone("anonymous");
//// Compiled Instruction
LOG.info("IOR");
opinfo.mv.visitInsn(Opcodes.IOR);
do_assign_common(lval, anonyInt, opinfo);
//// End
return anonyInt;
}
项目:Spigot-Nonce-ID-Finder
文件:MethodNode.java
@Override
public void visitMethodInsn(int opcode, String owner, String name,
String desc, boolean itf) {
if (api < Opcodes.ASM5) {
super.visitMethodInsn(opcode, owner, name, desc, itf);
return;
}
instructions.add(new MethodInsnNode(opcode, owner, name, desc, itf));
}
项目:MeziLang
文件:OpLong.java
@Override
public void return_dummy_variable(OpInfo opinfo) throws CompileException {
opinfo.mv.visitInsn(Opcodes.LCONST_1);
LOG.info("LCONST_1 for Long");
opinfo.mv.visitInsn(Opcodes.LRETURN);
LOG.info("LRETURN" + " for Long");
}
项目:elasticsearch_my
文件:AStoreable.java
/**
* Writes the opcodes to flip a negative array index (meaning slots from the end of the array) into a 0-based one (meaning slots from
* the start of the array).
*/
static void writeIndexFlip(MethodWriter writer, Consumer<MethodWriter> writeGetLength) {
Label noFlip = new Label();
// Everywhere when it says 'array' below that could also be a list
// The stack after each instruction: array, unnormalized_index
writer.dup(); // array, unnormalized_index, unnormalized_index
writer.ifZCmp(Opcodes.IFGE, noFlip); // array, unnormalized_index
writer.swap(); // negative_index, array
writer.dupX1(); // array, negative_index, array
writeGetLength.accept(writer); // array, negative_index, length
writer.visitInsn(Opcodes.IADD); // array, noralized_index
writer.mark(noFlip); // array, noralized_index
}
项目:fastAOP
文件:GeneratorAdapter.java
/**
* Generates the instruction to push the given value on the stack.
*
* @param value
* the value to be pushed on the stack.
*/
public void push(final double value) {
long bits = Double.doubleToLongBits(value);
if (bits == 0L || bits == 0x3ff0000000000000L) { // +0.0d and 1.0d
mv.visitInsn(Opcodes.DCONST_0 + (int) value);
} else {
mv.visitLdcInsn(value);
}
}
项目:Aceso
文件:IncrementalTool.java
public static int transformAccessForInstantRun(int access) {
IncrementalVisitor.AccessRight accessRight = IncrementalVisitor.AccessRight.fromNodeAccess(access);
if (accessRight != IncrementalVisitor.AccessRight.PRIVATE) {
access &= ~Opcodes.ACC_PROTECTED;
access &= ~Opcodes.ACC_PRIVATE;
return access | Opcodes.ACC_PUBLIC;
}
return access;
}
项目:Spigot-Attribute-Remover
文件:AnalyzerAdapter.java
@Override
public void visitInsn(final int opcode) {
if (mv != null) {
mv.visitInsn(opcode);
}
execute(opcode, 0, null);
if ((opcode >= Opcodes.IRETURN && opcode <= Opcodes.RETURN)
|| opcode == Opcodes.ATHROW) {
this.locals = null;
this.stack = null;
}
}
项目:DirectLeaks-AntiReleak-Remover
文件:GeneratorAdapter.java
/**
* Generates the instruction to push the given value on the stack.
*
* @param value
* the value to be pushed on the stack.
*/
public void push(final long value) {
if (value == 0L || value == 1L) {
mv.visitInsn(Opcodes.LCONST_0 + (int) value);
} else {
mv.visitLdcInsn(value);
}
}
项目:EvoMaster
文件:HeuristicsForJumpsTest.java
@Test
public void test_IF_ICMPLT_pos_false(){
// x < y
int code = Opcodes.IF_ICMPLT;
Truthness a = getForValueComparison(10, 6, code);
assertFalse(a.isTrue());
Truthness b = getForValueComparison(222, 5, code);
assertFalse(b.isTrue());
assertTrue(a.getOfTrue() > b.getOfTrue());
}
项目:Spigot-Attribute-Remover
文件:GeneratorAdapter.java
/**
* Generates the instruction to create a new array.
*
* @param type
* the type of the array elements.
*/
public void newArray(final Type type) {
int typ;
switch (type.getSort()) {
case Type.BOOLEAN:
typ = Opcodes.T_BOOLEAN;
break;
case Type.CHAR:
typ = Opcodes.T_CHAR;
break;
case Type.BYTE:
typ = Opcodes.T_BYTE;
break;
case Type.SHORT:
typ = Opcodes.T_SHORT;
break;
case Type.INT:
typ = Opcodes.T_INT;
break;
case Type.FLOAT:
typ = Opcodes.T_FLOAT;
break;
case Type.LONG:
typ = Opcodes.T_LONG;
break;
case Type.DOUBLE:
typ = Opcodes.T_DOUBLE;
break;
default:
typeInsn(Opcodes.ANEWARRAY, type);
return;
}
mv.visitIntInsn(Opcodes.NEWARRAY, typ);
}
项目:EvoMaster
文件:HeuristicsForJumpsTest.java
@Test
public void test_IF_ICMPEQ_pos(){
// x == y
int code = Opcodes.IF_ICMPEQ;
Truthness t = getForValueComparison(5, 5, code);
assertTrue(t.isTrue());
assertFalse(t.isFalse());
}
项目:Spigot-Attribute-Remover
文件:InstructionAdapter.java
public void lconst(final long cst) {
if (cst == 0L || cst == 1L) {
mv.visitInsn(Opcodes.LCONST_0 + (int) cst);
} else {
mv.visitLdcInsn(cst);
}
}