本文整理了Java中org.objectweb.asm.tree.AbstractInsnNode
类的一些代码示例,展示了AbstractInsnNode
类的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。AbstractInsnNode
类的具体详情如下:
包路径:org.objectweb.asm.tree.AbstractInsnNode
类名称:AbstractInsnNode
[英]A node that represents a bytecode instruction. An instruction can appear at most once in at most one InsnList at a time.
[中]表示字节码指令的节点。一条指令一次最多只能在一个InsnList中出现一次。
代码示例来源:origin: pxb1988/dex2jar
@Override
public JvmValue newOperation(AbstractInsnNode insn) throws AnalyzerException {
switch (insn.getOpcode()) {
case ACONST_NULL:
return b(1, Exprs.nNull());
case ICONST_4:
case ICONST_5:
return b(1, Exprs.nInt(insn.getOpcode() - ICONST_0));
case LCONST_0:
case LCONST_1:
return b(2, Exprs.nLong(insn.getOpcode() - LCONST_0));
case FCONST_0:
case FCONST_1:
case FCONST_2:
return b(1, Exprs.nFloat(insn.getOpcode() - FCONST_0));
case DCONST_0:
case DCONST_1:
return b(2, Exprs.nDouble(insn.getOpcode() - DCONST_0));
case BIPUSH:
case SIPUSH:
case GETSTATIC:
FieldInsnNode fin = (FieldInsnNode) insn;
return b(Type.getType(fin.desc).getSize(), Exprs.nStaticField("L" + fin.owner + ";", fin.name,
fin.desc));
case NEW:
代码示例来源:origin: pxb1988/dex2jar
IrMethod convert0(String owner, MethodNode methodNode) throws AnalyzerException {
this.methodNode = methodNode;
target = populate(owner, methodNode);
if (methodNode.instructions.size() == 0) {
return target;
BitSet[] exBranch = new BitSet[insnList.size()];
parentCount = new int[insnList.size()];
for (TryCatchBlockNode tcb : methodNode.tryCatchBlocks) {
target.traps.add(new Trap(getLabel(tcb.start), getLabel(tcb.end), new LabelStmt[]{getLabel(tcb.handler)},
new String[]{tcb.type == null ? null : Type.getObjectType(tcb.type).getDescriptor()}));
int handlerIdx = insnList.indexOf(tcb.handler);
handlers.set(handlerIdx);
for (AbstractInsnNode p = tcb.start.getNext(); p != tcb.end; p = p.getNext()) {
BitSet x = exBranch[insnList.indexOf(p)];
if (p.getType() == AbstractInsnNode.LABEL) {
stmts.add(getLabel((LabelNode) p));
代码示例来源:origin: pxb1988/dex2jar
TraceMethodVisitor mv = new TraceMethodVisitor(t);
String format = "%05d %-" + (method.maxStack + method.maxLocals + 6) + "s|%s";
for (int j = 0; j < method.instructions.size(); ++j) {
method.instructions.get(j).accept(mv);
代码示例来源:origin: pxb1988/dex2jar
private void cleanDebug(MethodNode mn) {
for (AbstractInsnNode p = mn.instructions.getFirst(); p != null; ) {
if (p.getType() == AbstractInsnNode.LINE) {
AbstractInsnNode q = p.getNext();
mn.instructions.remove(p);
p = q;
} else {
p = p.getNext();
}
}
mn.localVariables = null;
}
代码示例来源:origin: pxb1988/dex2jar
@Override
public void execute(AbstractInsnNode insn, Interpreter<JvmValue> interpreter) throws AnalyzerException {
if (insn.getType() == AbstractInsnNode.FRAME || insn.getType() == AbstractInsnNode.LINE || insn.getType() == AbstractInsnNode.LABEL) {
return;
}
if (insn.getOpcode() == Opcodes.RETURN) {
interpreter.returnOperation(insn, null, null);
} else if (insn.getOpcode() == Opcodes.GOTO) {
interpreter.unaryOperation(insn, null);
} else if (insn.getOpcode() == RET) {
throw new RuntimeException("not support yet!");
} else {
super.execute(insn, interpreter);
}
}
}
代码示例来源:origin: pxb1988/dex2jar
private void initParentCount(int[] parentCount) {
parentCount[0] = 1;
for (AbstractInsnNode p = insnList.getFirst(); p != null; p = p.getNext()) {
if (p.getType() == AbstractInsnNode.JUMP_INSN) {
JumpInsnNode jump = (JumpInsnNode) p;
parentCount[insnList.indexOf(jump.label)]++;
int op = p.getOpcode();
if (op == Opcodes.TABLESWITCH || op == Opcodes.LOOKUPSWITCH) {
if (op == Opcodes.TABLESWITCH) {
TableSwitchInsnNode tsin = (TableSwitchInsnNode) p;
for (LabelNode label : tsin.labels) {
parentCount[insnList.indexOf(label)]++;
parentCount[insnList.indexOf(tsin.dflt)]++;
AbstractInsnNode next = p.getNext();
if(next!=null) {
parentCount[insnList.indexOf(p.getNext())]++;
代码示例来源:origin: EvoSuite/evosuite
continue;
Type type = Type.getType(field.getType());
logger.info("Checking replacement field variable " + field.getName());
continue;
if (type.getDescriptor().equals(desc)) {
logger.info("Adding replacement field variable " + field.getName());
InsnList list = new InsnList();
if (node.getOpcode() == Opcodes.GETFIELD) {
list.add(new InsnNode(Opcodes.POP)); // Remove field owner from stack
list.add(new FieldInsnNode(Opcodes.GETSTATIC,
className.replace('.', '/'), field.getName(),
type.getDescriptor()));
else {
list.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this
代码示例来源:origin: com.amazon.device.tools.build/builder
Type returnType = Type.getReturnType(methodNode.desc);
InsnList instructions = methodNode.instructions;
for (AbstractInsnNode instruction : instructions.toArray()) {
if (!deadCode) {
if (instruction.getOpcode() == Opcodes.INVOKESPECIAL) {
instructions.insert(instruction, new InsnNode(Opcodes.RETURN));
instructions.remove(instruction);
instructions.add(new InsnNode(Opcodes.ICONST_0));
} else if (returnType.equals(Type.LONG_TYPE)) {
instructions.add(new InsnNode(Opcodes.LCONST_0));
} else if (returnType.equals(Type.FLOAT_TYPE)) {
instructions.add(new InsnNode(Opcodes.FCONST_0));
} else if (returnType.equals(Type.DOUBLE_TYPE)) {
代码示例来源:origin: pxb1988/dex2jar
values[i] = getLocal(xvalues.get(i));
if (insn.getOpcode() == MULTIANEWARRAY) {
throw new UnsupportedOperationException("Not supported yet.");
} else {
MethodInsnNode mi = (MethodInsnNode) insn;
com.googlecode.dex2jar.ir.expr.Value v = null;
String ret = Type.getReturnType(mi.desc).getDescriptor();
String owner = "L" + mi.owner + ";";
String ps[] = toDescArray(Type.getArgumentTypes(mi.desc));
switch (insn.getOpcode()) {
case INVOKEVIRTUAL:
v = Exprs.nInvokeVirtual(values, owner, mi.name, ps, ret);
代码示例来源:origin: org.parboiled/parboiled-java
public void process(ParserClassNode classNode, RuleMethod method) throws Exception {
checkArgNotNull(classNode, "classNode");
checkArgNotNull(method, "method");
InsnList instructions = method.instructions;
AbstractInsnNode ret = instructions.getLast();
while (ret.getOpcode() != ARETURN) {
ret = ret.getPrevious();
}
// stack: <Matcher>
instructions.insertBefore(ret, new TypeInsnNode(NEW, VAR_FRAMING_MATCHER.getInternalName()));
// stack: <Matcher> :: <VarFramingMatcher>
instructions.insertBefore(ret, new InsnNode(DUP_X1));
// stack: <VarFramingMatcher> :: <Matcher> :: <VarFramingMatcher>
instructions.insertBefore(ret, new InsnNode(SWAP));
// stack: <VarFramingMatcher> :: <VarFramingMatcher> :: <Matcher>
createVarFieldArray(method, instructions, ret);
// stack: <VarFramingMatcher> :: <VarFramingMatcher> :: <Matcher> :: <VarFieldArray>
instructions.insertBefore(ret, new MethodInsnNode(INVOKESPECIAL, VAR_FRAMING_MATCHER.getInternalName(),
"<init>", '(' + RULE_DESC + '[' + VAR_DESC + ")V", false));
// stack: <VarFramingMatcher>
method.setBodyRewritten();
}
代码示例来源:origin: EvoSuite/evosuite
private void addObjectInstrumentation(BytecodeInstruction instruction, InsnList instrumentation, MethodNode mn) {
if(instruction.isLocalVariableDefinition()) {
if(instruction.getASMNode().getOpcode() == Opcodes.ALOAD) {
instrumentation.add(new InsnNode(Opcodes.DUP));
} else {
instrumentation.add(new InsnNode(Opcodes.ACONST_NULL));
if(instruction.getASMNode().getOpcode() == Opcodes.ASTORE) {
instrumentation.add(new InsnNode(Opcodes.DUP));
} else {
instrumentation.add(new InsnNode(Opcodes.ACONST_NULL));
} else if(instruction.isFieldNodeDU()) {
Type type = Type.getType(instruction.getFieldType());
if(type.getSort() == Type.OBJECT) {
instrumentation.add(new InsnNode(Opcodes.DUP));
} else {
Type type = Type.getReturnType(instruction.getMethodCallDescriptor());
if(type.getSort() == Type.OBJECT) {
instrumentation.add(new InsnNode(Opcodes.DUP));
代码示例来源:origin: org.activecomponents.jadex/jadex-kernel-bdiv3
Type[] args = Type.getArgumentTypes(mn.desc);
InsnList nl = new InsnList();
nl.add(new VarInsnNode(Opcodes.ALOAD, 0)); // loads the object
nl.add(new FieldInsnNode(Opcodes.GETFIELD, iclname, AGENT_FIELD_NAME, Type.getDescriptor(IInternalAccess.class)));
nl.add(new LdcInsnNode(belname));
nl.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "jadex/bdiv3/features/impl/BDIAgentFeature", "unobserveValue",
nl.add(new InsnNode(Opcodes.ACONST_NULL));
nl.add(new InsnNode(Opcodes.ACONST_NULL)); // oldvalue ?
nl.add(new InsnNode(Opcodes.ACONST_NULL)); // no index/key
nl.add(new VarInsnNode(Opcodes.ALOAD, 0)); // loads the agent object
nl.add(new FieldInsnNode(Opcodes.GETFIELD, iclname, AGENT_FIELD_NAME, Type.getDescriptor(IInternalAccess.class)));
nl.add(new LdcInsnNode(belname));
for(n = l.getLast(); n.getOpcode()!=Opcodes.RETURN; n = n.getPrevious())
代码示例来源:origin: co.paralleluniverse/quasar
@Override
public BasicValue binaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2) throws AnalyzerException {
if(insn.getOpcode() == Opcodes.AALOAD) {
Type t1 = value1.getType();
if(t1 == null || t1.getSort() != Type.ARRAY) {
throw new AnalyzerException(insn, "AALOAD needs an array as first parameter");
}
Type resultType = Type.getType(t1.getDescriptor().substring(1));
return new BasicValue(resultType);
}
return super.binaryOperation(insn, value1, value2);
}
代码示例来源:origin: com.android.tools.lint/lint-api
@Nullable
private static MethodInsnNode findConstructorInvocation(
@NonNull MethodNode method,
@NonNull String className) {
InsnList nodes = method.instructions;
for (int i = 0, n = nodes.size(); i < n; i++) {
AbstractInsnNode instruction = nodes.get(i);
if (instruction.getOpcode() == Opcodes.INVOKESPECIAL) {
MethodInsnNode call = (MethodInsnNode) instruction;
if (className.equals(call.owner)) {
return call;
}
}
}
return null;
}
代码示例来源:origin: jooby-project/jooby
|| getOrCreateKotlinClass().test(node)) {
String owner = Type.getReturnType(node.desc).getClassName();
AbstractInsnNode prev = node.getPrevious();
if (prev instanceof FieldInsnNode && ((MethodInsnNode) n).name.equals("toEnum")) {
toType = loadType(loader, ((Type) cst).getClassName());
return loadType(loader, typeInsn.desc);
} else if (n != null && Opcodes.DUP == n.getOpcode()) {
AbstractInsnNode next = n.getNext();
if (next instanceof MethodInsnNode) {
if (((MethodInsnNode) next).name.equals("toOptional")) {
代码示例来源:origin: fge/grappa
@Override
public void returnOperation(final AbstractInsnNode insn,
final BasicValue value, final BasicValue expected)
throws AnalyzerException
{
Preconditions.checkState(insn.getOpcode() == ARETURN);
Preconditions.checkState(unwrap(value).getType().equals(
Type.getType(Rule.class)));
Preconditions.checkState(unwrap(expected).getType().equals(
Type.getType(Rule.class)));
Preconditions.checkState(method.getReturnInstructionNode() == null);
method.setReturnInstructionNode(createNode(insn, null, value));
}
代码示例来源:origin: fergarrui/custom-bytecode-analyzer
public void populateClassGraph() {
String className = Type.getObjectType(classNode.name).getClassName();
logger.debug("Creating graph for class {}" , className);
for (MethodNode methodNode : classNode.methods) {
String methodName = methodNode.name;
MethodGraph caller = new MethodGraph(className, methodName);
InsnList instructions = methodNode.instructions;
for (int i = 0; i < instructions.size(); i++) {
AbstractInsnNode insnNode = instructions.get(i);
if (insnNode.getType() == AbstractInsnNode.METHOD_INSN) {
MethodInsnNode methodInsnNode = (MethodInsnNode)insnNode;
String calledOwner = Type.getObjectType(methodInsnNode.owner).getClassName();
String calledName = methodInsnNode.name;
MethodGraph called = new MethodGraph(calledOwner, calledName);
Call call = new Call(caller, called);
if (!called.getOwner().equals("java.lang.Object") && !called.getName().equals("<init>")) {
logger.trace("Adding call graph: {}", call.toString());
GraphHolder.addCallGraph(call);
}
}
}
}
}
}
代码示例来源:origin: pxb1988/dex2jar
@Override
public JvmValue unaryOperation(AbstractInsnNode insn, JvmValue value0) throws AnalyzerException {
Local local = value0 == null ? null : getLocal(value0);
switch (insn.getOpcode()) {
case INEG:
return b(1, Exprs.nNeg(local, "I"));
Type fieldType = Type.getType(fin.desc);
return b(fieldType.getSize(), Exprs.nField(local, "L" + fin.owner + ";", fin.name, fin.desc));
代码示例来源:origin: org.ow2.asm/asm-debug-all
@Override
public BasicValue naryOperation(final AbstractInsnNode insn,
final List<? extends BasicValue> values) throws AnalyzerException {
int opcode = insn.getOpcode();
if (opcode == MULTIANEWARRAY) {
for (int i = 0; i < values.size(); ++i) {
if (!BasicValue.INT_VALUE.equals(values.get(i))) {
throw new AnalyzerException(insn, null,
BasicValue.INT_VALUE, values.get(i));
int j = 0;
if (opcode != INVOKESTATIC && opcode != INVOKEDYNAMIC) {
Type owner = Type.getObjectType(((MethodInsnNode) insn).owner);
if (!isSubTypeOf(values.get(i++), newValue(owner))) {
throw new AnalyzerException(insn, "Method owner",
Type[] args = Type.getArgumentTypes(desc);
while (i < values.size()) {
BasicValue expected = newValue(args[j++]);
代码示例来源:origin: junkdog/artemis-odb
private void resetField(FieldDescriptor field) {
mv.visitVarInsn(ALOAD, 0);
field.reset.accept(mv);
mv.visitFieldInsn(PUTFIELD, meta.type.getInternalName(), field.name, field.desc);
}
}
内容来源于网络,如有侵权,请联系作者删除!