类org.objectweb.asm.tree.LdcInsnNode源码实例Demo

下面列出了怎么用org.objectweb.asm.tree.LdcInsnNode的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: coroutines   文件: DebugGenerators.java
/**
 * Generates instructions for generating marker instructions. These marker instructions are meant to be is useful for debugging
 * instrumented code. For example, you can spot a specific portion of instrumented code by looking for specific markers in the assembly
 * output.
 * @param markerType marker type (determines what kind of instructions are generated)
 * @param text text to print out
 * @return instructions to call System.out.println with a string constant
 * @throws NullPointerException if any argument is {@code null}
 */
public static InsnList debugMarker(MarkerType markerType, String text) {
    Validate.notNull(markerType);
    Validate.notNull(text);
    
    InsnList ret = new InsnList();
    
    switch (markerType) {
        case NONE:
            break;
        case CONSTANT:
            ret.add(new LdcInsnNode(text));
            ret.add(new InsnNode(Opcodes.POP));
            break;
        case STDOUT:
            ret.add(new FieldInsnNode(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"));
            ret.add(new LdcInsnNode(text));
            ret.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false));
            break;
        default:
            throw new IllegalStateException();
    }

    return ret;
}
 
源代码2 项目: Cafebabe   文件: SourceInterpreter.java
@Override
public SourceValue newOperation(final AbstractInsnNode insn) {
	int size;
	switch (insn.getOpcode()) {
	case LCONST_0:
	case LCONST_1:
	case DCONST_0:
	case DCONST_1:
		size = 2;
		break;
	case LDC:
		Object value = ((LdcInsnNode) insn).cst;
		size = value instanceof Long || value instanceof Double ? 2 : 1;
		break;
	case GETSTATIC:
		size = Type.getType(((FieldInsnNode) insn).desc).getSize();
		break;
	default:
		size = 1;
		break;
	}
	return new SourceValue(size, insn);
}
 
源代码3 项目: JReFrameworker   文件: SourceInterpreter.java
@Override
public SourceValue newOperation(final AbstractInsnNode insn) {
  int size;
  switch (insn.getOpcode()) {
    case LCONST_0:
    case LCONST_1:
    case DCONST_0:
    case DCONST_1:
      size = 2;
      break;
    case LDC:
      Object value = ((LdcInsnNode) insn).cst;
      size = value instanceof Long || value instanceof Double ? 2 : 1;
      break;
    case GETSTATIC:
      size = Type.getType(((FieldInsnNode) insn).desc).getSize();
      break;
    default:
      size = 1;
      break;
  }
  return new SourceValue(size, insn);
}
 
源代码4 项目: Cafebabe   文件: OpcodeFormatting.java
/**
 * Given an integer, returns an InsnNode that will properly represent the int.
 * 
 * @param i
 * @return
 */
public static AbstractInsnNode toInt(int i) {
	switch (i) {
	case -1:
		return new InsnNode(Opcodes.ICONST_M1);
	case 0:
		return new InsnNode(Opcodes.ICONST_0);
	case 1:
		return new InsnNode(Opcodes.ICONST_1);
	case 2:
		return new InsnNode(Opcodes.ICONST_2);
	case 3:
		return new InsnNode(Opcodes.ICONST_3);
	case 4:
		return new InsnNode(Opcodes.ICONST_4);
	case 5:
		return new InsnNode(Opcodes.ICONST_5);
	}
	if (i > -129 && i < 128) {
		return new IntInsnNode(Opcodes.BIPUSH, i);
	}
	return new LdcInsnNode(i);
}
 
源代码5 项目: Concurnas   文件: SourceInterpreter.java
@Override
public SourceValue newOperation(final AbstractInsnNode insn) {
  int size;
  switch (insn.getOpcode()) {
    case LCONST_0:
    case LCONST_1:
    case DCONST_0:
    case DCONST_1:
      size = 2;
      break;
    case LDC:
      Object value = ((LdcInsnNode) insn).cst;
      size = value instanceof Long || value instanceof Double ? 2 : 1;
      break;
    case GETSTATIC:
      size = Type.getType(((FieldInsnNode) insn).desc).getSize();
      break;
    default:
      size = 1;
      break;
  }
  return new SourceValue(size, insn);
}
 
源代码6 项目: zelixkiller   文件: OpUtils.java
/**
 * Given an integer, returns an InsnNode that will properly represent the
 * int.
 * 
 * @param i
 * @return
 */
public static AbstractInsnNode toInt(int i) {
	switch (i) {
	case -1:
		return new InsnNode(Opcodes.ICONST_M1);
	case 0:
		return new InsnNode(Opcodes.ICONST_0);
	case 1:
		return new InsnNode(Opcodes.ICONST_1);
	case 2:
		return new InsnNode(Opcodes.ICONST_2);
	case 3:
		return new InsnNode(Opcodes.ICONST_3);
	case 4:
		return new InsnNode(Opcodes.ICONST_4);
	case 5:
		return new InsnNode(Opcodes.ICONST_5);
	}
	if (i > -129 && i < 128) {
		return new IntInsnNode(Opcodes.BIPUSH, i);
	}
	return new LdcInsnNode(i);
}
 
源代码7 项目: instrumentation   文件: TreeInstructions.java
public static AbstractInsnNode getPushInstruction(int value) {

        if (value == -1) {
            return new InsnNode(Opcodes.ICONST_M1);
        } else if (value == 0) {
            return new InsnNode(Opcodes.ICONST_0);
        } else if (value == 1) {
            return new InsnNode(Opcodes.ICONST_1);
        } else if (value == 2) {
            return new InsnNode(Opcodes.ICONST_2);
        } else if (value == 3) {
            return new InsnNode(Opcodes.ICONST_3);
        } else if (value == 4) {
            return new InsnNode(Opcodes.ICONST_4);
        } else if (value == 5) {
            return new InsnNode(Opcodes.ICONST_5);
        } else if ((value >= -128) && (value <= 127)) {
            return new IntInsnNode(Opcodes.BIPUSH, value);
        } else if ((value >= -32768) && (value <= 32767)) {
            return new IntInsnNode(Opcodes.SIPUSH, value);
        } else {
            return new LdcInsnNode(value);
        }
    }
 
源代码8 项目: radon   文件: AntiDebug.java
private InsnList createIsDebugList() {
    boolean isUpper = RandomUtils.getRandomBoolean();
    String argument = DEBUG_OPTIONS[debugOptionIndex.incrementAndGet() % DEBUG_OPTIONS.length];
    if (isUpper)
        argument = argument.toUpperCase();
    else
        argument = argument.toLowerCase();

    InsnList insnList = new InsnList();
    insnList.add(new MethodInsnNode(INVOKESTATIC, "java/lang/management/ManagementFactory", "getRuntimeMXBean", "()Ljava/lang/management/RuntimeMXBean;", false));
    insnList.add(new MethodInsnNode(INVOKEINTERFACE, "java/lang/management/RuntimeMXBean", "getInputArguments", "()Ljava/util/List;", true));
    insnList.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;", false));
    insnList.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", isUpper ? "toUpperCase" : "toLowerCase", "()Ljava/lang/String;", false));
    insnList.add(new LdcInsnNode(argument));
    insnList.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "contains", "(Ljava/lang/CharSequence;)Z", false));

    return insnList;
}
 
源代码9 项目: JReFrameworker   文件: SourceInterpreter.java
@Override
public SourceValue newOperation(final AbstractInsnNode insn) {
  int size;
  switch (insn.getOpcode()) {
    case LCONST_0:
    case LCONST_1:
    case DCONST_0:
    case DCONST_1:
      size = 2;
      break;
    case LDC:
      Object value = ((LdcInsnNode) insn).cst;
      size = value instanceof Long || value instanceof Double ? 2 : 1;
      break;
    case GETSTATIC:
      size = Type.getType(((FieldInsnNode) insn).desc).getSize();
      break;
    default:
      size = 1;
      break;
  }
  return new SourceValue(size, insn);
}
 
源代码10 项目: JByteMod-Beta   文件: SourceInterpreter.java
@Override
public SourceValue newOperation(final AbstractInsnNode insn) {
  int size;
  switch (insn.getOpcode()) {
  case LCONST_0:
  case LCONST_1:
  case DCONST_0:
  case DCONST_1:
    size = 2;
    break;
  case LDC:
    Object cst = ((LdcInsnNode) insn).cst;
    size = cst instanceof Long || cst instanceof Double ? 2 : 1;
    break;
  case GETSTATIC:
    size = Type.getType(((FieldInsnNode) insn).desc).getSize();
    break;
  default:
    size = 1;
  }
  return new SourceValue(size, insn);
}
 
源代码11 项目: rembulan   文件: ASMUtils.java
public static AbstractInsnNode loadInt(int i) {
	switch (i) {
		case -1: return new InsnNode(ICONST_M1);
		case 0:  return new InsnNode(ICONST_0);
		case 1:  return new InsnNode(ICONST_1);
		case 2:  return new InsnNode(ICONST_2);
		case 3:  return new InsnNode(ICONST_3);
		case 4:  return new InsnNode(ICONST_4);
		case 5:  return new InsnNode(ICONST_5);
		default: {
			if (i >= Byte.MIN_VALUE && i <= Byte.MAX_VALUE) return new IntInsnNode(BIPUSH, i);
			else if (i >= Short.MIN_VALUE && i <= Short.MAX_VALUE) return new IntInsnNode(SIPUSH, i);
			else return new LdcInsnNode(i);
		}
	}
}
 
源代码12 项目: rembulan   文件: ConversionMethods.java
public static InsnList toNumericalValue(String what) {
	Objects.requireNonNull(what);
	InsnList il = new InsnList();

	il.add(new LdcInsnNode(what));
	il.add(new MethodInsnNode(
			INVOKESTATIC,
			Type.getInternalName(Conversions.class),
			"toNumericalValue",
			Type.getMethodDescriptor(
					Type.getType(Number.class),
					Type.getType(Object.class),
					Type.getType(String.class)),
			false));

	return il;
}
 
源代码13 项目: deobfuscator   文件: LoadIntStep.java
public LoadIntStep() {
    super((a) -> 
    {
    	if(!(a instanceof LdcInsnNode))
    		return true;
    	return ((LdcInsnNode)a).cst instanceof Integer;
    },Opcodes.ICONST_M1,
            Opcodes.ICONST_0,
            Opcodes.ICONST_1,
            Opcodes.ICONST_2,
            Opcodes.ICONST_3,
            Opcodes.ICONST_4,
            Opcodes.ICONST_5,
            Opcodes.LDC,
            Opcodes.BIPUSH,
            Opcodes.SIPUSH
    );
}
 
源代码14 项目: JAADAS   文件: AsmMethodSource.java
private void convertLdcInsn(LdcInsnNode insn) {
	Object val = insn.cst;
	boolean dword = val instanceof Long || val instanceof Double;
	StackFrame frame = getFrame(insn);
	Operand[] out = frame.out();
	Operand opr;
	if (out == null) {
		Value v = toSootValue(val);
		opr = new Operand(insn, v);
		frame.out(opr);
	} else {
		opr = out[0];
	}
	if (dword)
		pushDual(opr);
	else
		push(opr);
}
 
源代码15 项目: instrumentation   文件: Instrumentator.java
private void addGetMethodInvocation(InsnList il) {
    il.add(TreeInstructions.getPushInstruction(this.methodArguments.length));
    il.add(new TypeInsnNode(Opcodes.ANEWARRAY, "java/lang/Class"));
    int parameterClassesIndex = getFistAvailablePosition();
    il.add(new VarInsnNode(Opcodes.ASTORE, parameterClassesIndex));
    this.mn.maxLocals++;
    for (int i = 0; i < this.methodArguments.length; i++) {
        il.add(new VarInsnNode(Opcodes.ALOAD, parameterClassesIndex));
        il.add(TreeInstructions.getPushInstruction(i));
        il.add(TreeInstructions.getClassReferenceInstruction(methodArguments[i], cn.version & 0xFFFF));
        il.add(new InsnNode(Opcodes.AASTORE));
    }
    il.add(TreeInstructions.getClassConstantReference(this.classType, cn.version & 0xFFFF));
    il.add(new LdcInsnNode(this.mn.name));
    il.add(new VarInsnNode(Opcodes.ALOAD, parameterClassesIndex));
    il.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
            "org/brutusin/instrumentation/utils/Helper", "getSource",
            "(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/Object;", false));
}
 
源代码16 项目: NOVA-Core   文件: InstructionComparator.java
public static boolean insnEqual(AbstractInsnNode node1, AbstractInsnNode node2) {
	if (node1.getOpcode() != node2.getOpcode()) {
		return false;
	}

	switch (node2.getType()) {
		case VAR_INSN:
			return varInsnEqual((VarInsnNode) node1, (VarInsnNode) node2);
		case TYPE_INSN:
			return typeInsnEqual((TypeInsnNode) node1, (TypeInsnNode) node2);
		case FIELD_INSN:
			return fieldInsnEqual((FieldInsnNode) node1, (FieldInsnNode) node2);
		case METHOD_INSN:
			return methodInsnEqual((MethodInsnNode) node1, (MethodInsnNode) node2);
		case LDC_INSN:
			return ldcInsnEqual((LdcInsnNode) node1, (LdcInsnNode) node2);
		case IINC_INSN:
			return iincInsnEqual((IincInsnNode) node1, (IincInsnNode) node2);
		case INT_INSN:
			return intInsnEqual((IntInsnNode) node1, (IntInsnNode) node2);
		default:
			return true;
	}
}
 
源代码17 项目: Cafebabe   文件: OpcodeFormatting.java
public static String toString(AbstractInsnNode ain) {
	String s = getOpcodeText(ain.getOpcode());
	switch (ain.getType()) {
	case AbstractInsnNode.FIELD_INSN:
		FieldInsnNode fin = (FieldInsnNode) ain;
		return s + " " + fin.owner + "#" + fin.name + " " + fin.desc;
	case AbstractInsnNode.METHOD_INSN:
		MethodInsnNode min = (MethodInsnNode) ain;
		return s + " " + min.owner + "#" + min.name + min.desc;
	case AbstractInsnNode.VAR_INSN:
		VarInsnNode vin = (VarInsnNode) ain;
		return s + " " + vin.var;
	case AbstractInsnNode.TYPE_INSN:
		TypeInsnNode tin = (TypeInsnNode) ain;
		return s + " " + tin.desc;
	case AbstractInsnNode.MULTIANEWARRAY_INSN:
		MultiANewArrayInsnNode mnin = (MultiANewArrayInsnNode) ain;
		return s + " " + mnin.dims + " " + mnin.desc;
	case AbstractInsnNode.JUMP_INSN:
		JumpInsnNode jin = (JumpInsnNode) ain;
		return s + " " + getIndex(jin.label);
	case AbstractInsnNode.LDC_INSN:
		LdcInsnNode ldc = (LdcInsnNode) ain;
		return s + " " + ldc.cst.toString();
	case AbstractInsnNode.INT_INSN:
		return s + " " + getIntValue(ain);
	case AbstractInsnNode.IINC_INSN:
		IincInsnNode iinc = (IincInsnNode) ain;
		return s + " " + iinc.var + " +" + iinc.incr;
	case AbstractInsnNode.FRAME:
		FrameNode fn = (FrameNode) ain;
		return s + " " + getOpcodeText(fn.type) + " " + fn.local.size() + " " + fn.stack.size();
	case AbstractInsnNode.LABEL:
		LabelNode ln = (LabelNode) ain;
		return s + " " + getIndex(ln);
	}
	return s;
}
 
源代码18 项目: Cafebabe   文件: InstructionEditorPanel.java
private void ldcComponentUpdate(WebComboBox wcb, LdcInsnNode ain, Field f, WebTextField field) {
	switch (wcb.getSelectedIndex()) {
	case 0:
		setField(f, ain, field.getText().trim());
		break;
	case 1:
		setField(f, ain, Integer.parseInt(field.getText().trim()));
		break;
	case 2:
		setField(f, ain, Float.parseFloat(field.getText().trim()));
		break;
	case 3:
		setField(f, ain, Long.parseLong(field.getText().trim()));
		break;
	case 4:
		setField(f, ain, Double.parseDouble(field.getText().trim()));
		break;
	case 5:
		setField(f, ain, Type.getType(field.getText().trim()));
		break;
	case 6:
		setField(f, ain, field.getText().trim());
		break;
	case 7:
		setField(f, ain, field.getText().trim());
		break;
	}
}
 
源代码19 项目: obfuscator   文件: StaticStringCallOptimizer.java
static void optimize(MethodNode method) {
    boolean found;

    do {
        found = false;

        for (AbstractInsnNode insnNode : method.instructions.toArray()) {
            if (insnNode instanceof MethodInsnNode) {
                MethodInsnNode methodInsnNode = (MethodInsnNode) insnNode;
                AbstractInsnNode prev = Utils.getPrevious(methodInsnNode, 1);

                if (prev instanceof LdcInsnNode && ((LdcInsnNode) prev).cst instanceof String && (Utils.matchMethodNode(methodInsnNode, "java/lang/Object.hashCode:()I") || Utils.matchMethodNode(methodInsnNode, "java/lang/String.hashCode:()I"))) {
                    method.instructions.insert(insnNode, NodeUtils.generateIntPush(((LdcInsnNode) prev).cst.hashCode()));
                    method.instructions.remove(insnNode);
                    method.instructions.remove(prev);
                    found = true;
                }
                if (prev instanceof LdcInsnNode && ((LdcInsnNode) prev).cst instanceof String && (Utils.matchMethodNode(methodInsnNode, "java/lang/String.toUpperCase:()Ljava/lang/String;"))) {
                    method.instructions.insert(insnNode, new LdcInsnNode(((String) ((LdcInsnNode) prev).cst).toUpperCase()));
                    method.instructions.remove(insnNode);
                    method.instructions.remove(prev);
                    found = true;
                }
                if (prev instanceof LdcInsnNode && ((LdcInsnNode) prev).cst instanceof String && (Utils.matchMethodNode(methodInsnNode, "java/lang/String.toLowerCase:()Ljava/lang/String;"))) {
                    method.instructions.insert(insnNode, new LdcInsnNode(((String) ((LdcInsnNode) prev).cst).toLowerCase()));
                    method.instructions.remove(insnNode);
                    method.instructions.remove(prev);
                    found = true;
                }
            }
        }
    } while (found);
}
 
源代码20 项目: maple-ir   文件: InstructionPattern.java
/**
 * Translate a single {@link AbstractInsnNode} to an {@link InstructionFilter}.
 * @param ain Instruction to convert.
 * @return A filter an an equivilent to the inputted instruction.
 */
public static InstructionFilter translate(AbstractInsnNode ain) {
	if (ain instanceof LdcInsnNode) {
		return new LdcInstructionFilter(((LdcInsnNode) ain).cst);
	} else if (ain instanceof TypeInsnNode) {
		return new TypeInstructionFilter(ain.getOpcode(), ((TypeInsnNode) ain).desc);
	} else if (ain instanceof FieldInsnNode) {
		return new FieldInstructionFilter(ain.getOpcode(), ((FieldInsnNode) ain).owner, ((FieldInsnNode) ain).name, ((FieldInsnNode) ain).desc);
	} else if (ain instanceof MethodInsnNode) {
		return new MethodInstructionFilter(ain.getOpcode(), ((MethodInsnNode) ain).owner, ((MethodInsnNode) ain).name, ((MethodInsnNode) ain).desc);
	} else if (ain instanceof VarInsnNode) {
		return new VarInstructionFilter(ain.getOpcode(), ((VarInsnNode) ain).var);
	} else if (ain instanceof InsnNode) {
		return new InsnInstructionFilter(ain.getOpcode());
	} else if (ain instanceof IincInsnNode) {
		return new IincInstructionFilter(((IincInsnNode) ain).incr, ((IincInsnNode) ain).var);
	} else if (ain instanceof JumpInsnNode) {
		return new JumpInstructionFilter(ain.getOpcode());
	} else if (ain instanceof LabelNode) {
		return InstructionFilter.ACCEPT_ALL; // TODO: Cache labels and check. // TODO: That's a fucking stupid idea.
	} else if (ain instanceof MultiANewArrayInsnNode) {
		return new MultiANewArrayInstructionFilter(((MultiANewArrayInsnNode) ain).desc, ((MultiANewArrayInsnNode) ain).dims);
	} else if(ain instanceof IntInsnNode) {
		return new IntInstructionFilter((IntInsnNode) ain);
	} else {
		return InstructionFilter.ACCEPT_ALL;
	}
}
 
源代码21 项目: maple-ir   文件: LdcInstructionFilter.java
@Override
public boolean accept(AbstractInsnNode t) {
	if (!(t instanceof LdcInsnNode))
		return false;
	LdcInsnNode ldc = (LdcInsnNode) t;
	return filter.accept(ldc.cst);
}
 
源代码22 项目: zelixkiller   文件: CorrelationMapper.java
/**
 * Get's a member's class types from its description. Best for methods.
 * 
 * @param member
 * @param map
 * @return
 */
private static List<MappedClass> getTypesFromMember(MappedMember member, Map<String, MappedClass> map) {
	List<String> names = RegexUtils.matchDescriptionClasses(member.getDesc());
	if (member.isMethod()) {
		for (AbstractInsnNode ain : member.getMethodNode().instructions.toArray()) {
			if (ain.getType() == AbstractInsnNode.METHOD_INSN) {
				MethodInsnNode min = (MethodInsnNode) ain;
				names.addAll(RegexUtils.matchDescriptionClasses(min.desc));
				names.add(min.owner);
			} else if (ain.getType() == AbstractInsnNode.FIELD_INSN) {
				FieldInsnNode fin = (FieldInsnNode) ain;
				names.addAll(RegexUtils.matchDescriptionClasses(fin.desc));
				names.add(fin.owner);
			} else if (ain.getType() == AbstractInsnNode.TYPE_INSN) {
				TypeInsnNode tin = (TypeInsnNode) ain;
				names.addAll(RegexUtils.matchDescriptionClasses(tin.desc));
			} else if (ain.getType() == AbstractInsnNode.LDC_INSN) {
				LdcInsnNode ldc = (LdcInsnNode) ain;
				if (ldc.cst instanceof Type) {
					Type t = (Type) ldc.cst;
					names.add(t.getClassName().replace(".", "/"));
				}
			}
		}
	}
	if (names.size() == 0) {
		return null;
	}
	List<MappedClass> classes = new ArrayList<MappedClass>();
	for (String name : names) {
		if (!map.containsKey(name)) {
			continue;
		}
		classes.add(map.get(name));
	}
	return classes;
}
 
源代码23 项目: zelixkiller   文件: OpUtils.java
public static String toString(AbstractInsnNode ain) {
	String s = getOpcodeText(ain.getOpcode());
	switch (ain.getType()) {
	case AbstractInsnNode.FIELD_INSN:
		FieldInsnNode fin = (FieldInsnNode) ain;
		return s + " " + fin.owner + "#" + fin.name + " " + fin.desc;
	case AbstractInsnNode.METHOD_INSN:
		MethodInsnNode min = (MethodInsnNode) ain;
		return s + " " + min.owner + "#" + min.name + min.desc;
	case AbstractInsnNode.VAR_INSN:
		VarInsnNode vin = (VarInsnNode) ain;
		return s + " " + vin.var;
	case AbstractInsnNode.TYPE_INSN:
		TypeInsnNode tin = (TypeInsnNode) ain;
		return s + " " + tin.desc;
	case AbstractInsnNode.JUMP_INSN:
		JumpInsnNode jin = (JumpInsnNode) ain;
		return s + " " + getIndex(jin.label);
	case AbstractInsnNode.LDC_INSN:
		LdcInsnNode ldc = (LdcInsnNode) ain;
		return s + " " + ldc.cst.toString();
	case AbstractInsnNode.INT_INSN:
		return s + " " + getIntValue(ain);
	case AbstractInsnNode.IINC_INSN:
		IincInsnNode iinc = (IincInsnNode) ain;
		return s + " " + iinc.var + " +" + iinc.incr;
	case AbstractInsnNode.FRAME:
		FrameNode fn = (FrameNode) ain;
		return s + " " + getOpcodeText(fn.type) + " " + fn.local.size() + " " + fn.stack.size();
	case AbstractInsnNode.LABEL:
		LabelNode ln = (LabelNode) ain;
		return s + " " + getIndex(ln);
	}
	return s;
}
 
源代码24 项目: zelixkiller   文件: InsnUtils.java
public static boolean isNumber(AbstractInsnNode ain) {
	if (ain.getOpcode() == BIPUSH || ain.getOpcode() == SIPUSH) {
		return true;
	}
	if (ain.getOpcode() >= ICONST_M1 && ain.getOpcode() <= ICONST_5) {
		return true;
	}
	if (ain instanceof LdcInsnNode) {
		LdcInsnNode ldc = (LdcInsnNode) ain;
		if (ldc.cst instanceof Number) {
			return true;
		}
	}
	return false;
}
 
源代码25 项目: zelixkiller   文件: InsnUtils.java
public static AbstractInsnNode generateIntPush(int i) {
	if (i <= 5 && i >= -1) {
		return new InsnNode(i + 3); //iconst_i
	}
	if (i >= -128 && i <= 127) {
		return new IntInsnNode(BIPUSH, i);
	}

	if (i >= -32768 && i <= 32767) {
		return new IntInsnNode(SIPUSH, i);
	}
	return new LdcInsnNode(i);
}
 
源代码26 项目: zelixkiller   文件: InsnUtils.java
public static int getIntValue(AbstractInsnNode node) {
	if (node.getOpcode() >= ICONST_M1 && node.getOpcode() <= ICONST_5) {
		return node.getOpcode() - 3;
	}
	if (node.getOpcode() == SIPUSH || node.getOpcode() == BIPUSH) {
		return ((IntInsnNode) node).operand;
	}
	if(node instanceof LdcInsnNode) {
		LdcInsnNode ldc = (LdcInsnNode) node;
		return Integer.parseInt(ldc.cst.toString());
	}
	return 0;
}
 
源代码27 项目: zelixkiller   文件: InsnUtils.java
public static String getStringValue(AbstractInsnNode node) {
	if (node.getType() == AbstractInsnNode.LDC_INSN) {
		LdcInsnNode ldc = (LdcInsnNode) node;
		return ldc.cst.toString();
	}
	return "";
}
 
源代码28 项目: zelixkiller   文件: StringObfuscationCipherVMT11.java
private void removeUnwantedCalls(InsnList decryption) {
	// TODO remove unwanted methodinsnnodes
	for (AbstractInsnNode ain : decryption.toArray()) {
		if (ain.getOpcode() == INVOKEDYNAMIC) {
			InvokeDynamicInsnNode idin = (InvokeDynamicInsnNode) ain;
			if (idin.desc.equals("(IJ)Ljava/lang/String;")) {
				decryption.insertBefore(idin, new InsnNode(POP2));
				decryption.insert(idin, new LdcInsnNode("<clinit> decryption invokedynamic string undecrypted"));
				decryption.set(idin, new InsnNode(POP));
			}
		}
	}
}
 
源代码29 项目: zelixkiller   文件: StringObfuscationCipherT11.java
public static boolean containsDESPadLDC(MethodNode clinit) {
	for (AbstractInsnNode ain : clinit.instructions.toArray()) {
		if (ain.getOpcode() == LDC) {
			String cst = String.valueOf(((LdcInsnNode) ain).cst);
			if (cst.equals("DES/CBC/PKCS5Padding")) {
				return true;
			}
		}
	}
	return false;
}
 
源代码30 项目: radon   文件: Virtualizer.java
private static boolean canProtect(InsnList insnList) {
    return Stream.of(insnList.toArray()).noneMatch(insn -> insn.getOpcode() == INVOKEDYNAMIC
            || (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst instanceof Handle)
            || insn instanceof MultiANewArrayInsnNode
            || insn instanceof LookupSwitchInsnNode
            || insn instanceof TableSwitchInsnNode);
}
 
 类所在包
 类方法
 同包方法