`
chenjingbo
  • 浏览: 460027 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ASM的helloworld例子(mark).

 
阅读更多

mark贴.

package asm;

import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Created with IntelliJ IDEA.
 * User: zhenghui
 * Date: 13-11-4
 * Time: 下午8:33
 */
public class AsmHelloWorld extends ClassLoader{

    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
        ClassWriter classWriter = new ClassWriter(0);
        classWriter.visit(Opcodes.V1_6,Opcodes.ACC_PUBLIC,"Example",null,"java/lang/Object",null);
        //创建默认构造器
        MethodVisitor methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC,"<init>","()V",null,null);
        methodVisitor.visitVarInsn(Opcodes.ALOAD,0);
        methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL,"java/lang/Object","<init>","()V");
        methodVisitor.visitInsn(Opcodes.RETURN);
        methodVisitor.visitMaxs(1,1);
        methodVisitor.visitEnd();
        methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC,"main","([Ljava/lang/String;)V",null,null);
        // 调用System类的PrintStream类的out
        methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
        methodVisitor.visitLdcInsn("Hello World!");
        methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,"java/io/PrintStream","println","(Ljava/lang/String;)V");
        methodVisitor.visitInsn(Opcodes.RETURN);
        methodVisitor.visitMaxs(2,2);
        byte[] code = classWriter.toByteArray();
        AsmHelloWorld classLoader = new AsmHelloWorld();
        Class clazz = classLoader.defineClass("Example",code,0,code.length);
        Method method = clazz.getMethods()[0];
        method.invoke(null,new Object[]{null});
    }
}

 

分享到:
评论

相关推荐

    asm-util.jar

    asm-util-1.3.4.jar, asm-util-1.3.5.jar, asm-util-1.4.1.jar, asm-util-1.4.3.jar, asm-util-1.5.1.jar, asm-util-1.5.2.jar, asm-util-1.5.3.jar, asm-util-2.0.jar, asm-util-2.1.jar, asm-util-2.2.1-sources....

    asm-all-5.2.jar

    asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-5.2.jar asm-all-...

    org.springframework.asm-3.0.5.RELEASE.jar

    《深入解析Spring ASM库:org.springframework.asm-3.0.5.RELEASE.jar》 Spring框架是Java开发领域中不可或缺的一部分,而org.springframework.asm-3.0.5.RELEASE.jar是Spring框架中的一个关键组件,主要涉及到字节...

    asm-all-3.0.jar等jar包

    资源包含asm-all-3.0.jar等jar包,可以解决程序中因asm版本引起的兼容性错误。其他相关的jar如下: asm-all-3.0.jar asm-2.2.3.jar asm.jar asm-attrs.jar asm-commons-2.2.3.jar asm-util-2.2.3.jar

    asm-all-5.0.jar

    想说找你不容易,asm-all-5.0.jar

    asm-commons-3.3.1.jar

    asm-commons-3.3.1.jar

    EditPlus(附asm.acp,asm.stx)

    【asm.acp】和【asm.stx】是EditPlus为了增强对汇编语言支持的插件文件。`.acp`文件代表“语法高亮配置文件”,它定义了特定语言(在这里是汇编语言)的语法色彩规则,使代码在编辑器中以不同颜色显示,便于理解和...

    asm-all-3.2.jar

    asm-all-3.2.jar 全集满足spring aop 开发过程中遇到的问题

    asm-2.2.1-sources.jar.zip

    标题中的"asm-2.2.1-sources.jar.zip"是一个包含ASM库源代码的压缩文件,版本号为2.2.1。ASM是一个Java字节码操控和分析框架,常用于动态代理、代码生成以及Java字节码的深度分析。这个文件可能是为了帮助开发者理解...

    kmod-oracleasm-2.0.8-8.el7.x86_64.rpm

    kmod-oracleasm-2.0.8-8.el7.x86_64.rpm oracleasm-centos7安装包

    asm-all-4.0.jar.zip

    标题中的"asm-all-4.0.jar.zip"指的是一个压缩包文件,该文件包含了ASM库的一个集合,版本为4.0。ASM是一个Java字节码操控和分析框架,主要用于动态生成类或者增强已有类的功能。ASM库广泛应用于字节码级别的编程,...

    org.springframework.asm-sources-3.0.5.release.jar

    org.springframework.asm-sources-3.0.5.release.jar

    asm-util-6.0.jar

    asm-util-6.0.jar 编写工具测试类中用到,配合asm-6.0.jar使用

    oracleasm-2.6.18-194.32.1.el5-2.0.5-1.el5.x86_64.rpm

    oracleasm-2.6.18-194.32.1.el5-2.0.5-1.el5.x86_64.rpm

    asm-util-2.2.2.jar

    asm-util-2.2.2.jar asm-util-2.2.2.jar asm-util-2.2.2.jar asm-util-2.2.2.jar asm-util-2.2.2.jar asm-util-2.2.2.jar

    oracleasm-2.6.18-194.el5xen-2.0.5-1.el5.x86_64.rpm

    oracleasm-2.6.18-194.el5xen-2.0.5-1.el5.x86_64.rpm

    kmod-oracleasm-2.0.8-16.el6_10.x86_64

    kmod-oracleasm-2.0.8-16.el6_10.x86_64.rpm

    asm.jar各个版本

    asm-1.3.3.jar, asm-1.3.4.jar, asm-1.3.5.jar, asm-1.4.1.jar, asm-1.4.2.jar, asm-1.4.3.jar, asm-1.4.jar, asm-1.5.1.jar, asm-1.5.2.jar, asm-1.5.3.jar, asm-2.0.jar, asm-2.1.jar, asm-2.2.1-sources.jar, asm...

    asm-2.2.3.jar,asm-commons-2.2.3.jar,asm-util-2.2.3.jar

    ASM是一个强大的Java字节码操控和分析框架,它可以直接生成和修改Java类和注解的字节码。这个框架主要用于动态代理、代码分析以及优化等场景。在Java开发中,当我们需要在运行时生成或者修改类的行为时,ASM提供了一...

    kmod-oracleasm-2.0.8-13.el6_8.x86_64.rpm 合集

    kmod-oracleasm-2.0.8-13.el6_8.x86_64.rpm oracleasmlib-2.0.4-1.el6.x86_64.rpm oracleasm-support-2.1.8-1.el6.x86_64.rpm

Global site tag (gtag.js) - Google Analytics