本文整理匯總了Java中org.objectweb.asm.tree.MethodNode.visitMethodInsn方法的典型用法代碼示例。如果您正苦於以下問題:Java MethodNode.visitMethodInsn方法的具體用法?Java MethodNode.visitMethodInsn怎麽用?Java MethodNode.visitMethodInsn使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類org.objectweb.asm.tree.MethodNode
的用法示例。
在下文中一共展示了MethodNode.visitMethodInsn方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。
示例1: transformClassInit
import org.objectweb.asm.tree.MethodNode; //導入方法依賴的package包/類
/**
* Transforms an existin <clinit> method. Adds bytecode before the return, if
* exists.
* @param className
* @param target
*/
private void transformClassInit(String className, MethodNode target) {
Type classType = Type.getObjectType(className);
if (target.instructions.size() > 0) {
if (target.instructions.getLast().getOpcode() == Opcodes.RETURN) {
target.instructions.remove(target.instructions.getLast());
}
}
// ldc
target.visitLdcInsn(classType);
// invokevirtual --> classloader on stack
target.visitMethodInsn(
Opcodes.INVOKEVIRTUAL,
JAVA_LANG_CLASS,
CLASS_GET_CLASSLODER_METHOD,
CLASS_GET_CLASSLOADER_DESC,
false
);
// putstatic
target.visitFieldInsn(
Opcodes.PUTSTATIC,
AGENT_CLASS,
AGENT_CLASSLOADER_FIELD,
AGENT_CLASSLOADER_DESC
);
target.visitInsn(Opcodes.RETURN);
// ldc || classloader instance
target.maxStack = Math.max(target.maxStack, 1);
target.maxLocals = Math.max(target.maxLocals, 1);
target.visitEnd();
}