- 浏览: 583104 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (174)
- JBPM (3)
- WWF (0)
- JavaScript (11)
- J2EE (40)
- OperationSystem (11)
- 数据库 (12)
- CSS (1)
- Ajax (2)
- J2SE (30)
- Tools (10)
- 服务器中间件 (3)
- 异常 (0)
- Flex (5)
- jQuery (11)
- html (9)
- Ejb (1)
- HTML5 Shiv–让该死的IE系列支持HTML5吧 (1)
- Spring (9)
- Quartz (3)
- log4j (1)
- maven (1)
- cpdetector (1)
- JSON (1)
- log4jdbc (1)
- asm (8)
- FusionCharts (1)
- jqplot (1)
- highcharts (1)
- excanvas (1)
- html5 (1)
- jpcap介绍 (1)
- weblogic (3)
- URLURLClassLoader (0)
- URLClassLoader (1)
- ant (2)
- ivy (2)
- nexus (1)
- IT (0)
- LoadRunner (1)
- SCSS (1)
- ruby (1)
- webstorm (1)
- typescript (1)
- Jboss7 (1)
- wildfly (1)
- oracle (5)
- esb (0)
- dubbo (2)
- zookeeper (3)
- eclipse (1)
- Android (2)
- Studio (1)
- Google (1)
- 微信 (1)
- 企业号 (1)
- Linux (13)
- Oracle12c (1)
- Hadoop (1)
- InletexEMC (1)
- Windows (1)
- Netty (3)
- Marshalling (2)
- Protobuf (1)
- gcc (1)
- Git (1)
- GitLab (1)
- shell (2)
- java (3)
- Spring4 (1)
- hibernate4 (1)
- postgresql (1)
- ApacheServer (2)
- Tomcat (2)
- ApacheHttpServer (2)
- realvnc (1)
- redhat (7)
- vncviewer (1)
- LVS (4)
- LVS-DR (1)
- RedHat6.5 (5)
- LVS-NAT (1)
- LVS-IPTUNNEL (2)
- LVS-TUN (1)
- keepalived (2)
- yum (1)
- iso (1)
- VMware (1)
- redhat5 (1)
- ha (1)
- nginx (2)
- proguard (1)
- Mat (1)
- DTFJ (1)
- axis2 (1)
- web service (1)
- centos (1)
- random (1)
- urandom (1)
- apache (1)
- IBM (1)
- cve (1)
- 漏洞 (1)
- JDBC (1)
- DataSource (1)
- jdk (1)
- tuxedo (2)
- wtc (1)
最新评论
-
skying007:
好资料,谢谢分享给啊
FusionCharts在服务器端导出图片(J2EE版) -
cgnnzg:
大神好 可以发一份源码给我学习么 多谢了 978241085 ...
springmvc+dubbo+zookeeper -
jifengjianhao:
求源码:854606899@qq.com
springmvc+dubbo+zookeeper -
wdloyeu:
shihuan8@163.com邮箱网盘在哪,没找到。能给份源 ...
Java Socket长连接示例代码 -
huangshangyuanji:
求代码:45613032@qq.com
springmvc+dubbo+zookeeper
以下代码需要asm-5.0.2.jar和asm-commons-5.0.2.jar两个包。
AsmAddMethod2.java这种方式会清空掉AccountMethod.java文件中的所有内容,然后加入新方法,一般用的情况比较少。
package com.shihuan.method; public class AccountMethod { String sql = "select * from tables"; public AccountMethod() { } public AccountMethod(String sql) { super(); this.sql = sql; } public void operation() { System.out.println("shihuan operation..."); } int executeInternal() { System.out.println("shihuan executeInternal..."); if (true) { System.out.println(this.sql); return 2; } return 3; } }
package com.shihuan.method; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.commons.GeneratorAdapter; import org.objectweb.asm.commons.Method; public class AsmAddMethod { public static void main(String[] args) throws IOException { ClassReader cr = new ClassReader("com.shihuan.method.AccountMethod"); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); ClassVisitor cv = new ClassVisitor(Opcodes.ASM5, cw){}; cr.accept(cv, Opcodes.ASM5); //新增加一个方法 MethodVisitor mw= cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "add", "([Ljava/lang/String;)V", null, null); // pushes the 'out' field (of type PrintStream) of the System class mw.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); // pushes the "Hello World!" String constant mw.visitLdcInsn("this is add method print!"); // invokes the 'println' method (defined in the PrintStream class) mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); mw.visitInsn(Opcodes.RETURN); // this code uses a maximum of two stack elements and two local // variables mw.visitMaxs(0, 0); mw.visitEnd(); byte[] code = cw.toByteArray(); OutputStream fos = new FileOutputStream("D:/myworkspace/JavaAsm/bin/com/shihuan/method/AccountMethod.class"); fos.write(code); fos.close(); } }
package com.shihuan.method; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; public class AsmDeleteMethod { public static void main(String[] args) throws IOException { ClassReader cr = new ClassReader("com.shihuan.method.AccountMethod"); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); ClassVisitor cv = new ClassVisitor(Opcodes.ASM5, cw) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { if("executeInternal".equals(name)) { return null; } return super.visitMethod(access, name, desc, signature, exceptions); //不为null,保留 } }; cr.accept(cv, ClassReader.SKIP_DEBUG); byte[] code = cw.toByteArray(); OutputStream fos = new FileOutputStream("D:/myworkspace/JavaAsm/bin/com/shihuan/method/AccountMethod.class"); fos.write(code); fos.close(); } }
AsmAddMethod2.java这种方式会清空掉AccountMethod.java文件中的所有内容,然后加入新方法,一般用的情况比较少。
package com.shihuan.method; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.commons.GeneratorAdapter; import org.objectweb.asm.commons.Method; public class AsmAddMethod2 { public static void main(String[] args) throws IOException { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); cw.visit(38, Opcodes.ACC_PUBLIC, "com.shihuan.method.AccountMethod", null, "java/lang/Object", null); Method m = Method.getMethod("void <init> ()"); GeneratorAdapter ga = new GeneratorAdapter(Opcodes.ACC_PUBLIC, m, null, null, cw); ga.loadThis(); ga.invokeConstructor(Type.getType(Object.class), m); ga.returnValue(); ga.endMethod(); m = Method.getMethod("void doSomething()"); ga = new GeneratorAdapter(Opcodes.ACC_PUBLIC, m, null, null, cw); ga.getStatic(Type.getType(System.class), "out", Type.getType(PrintStream.class)); ga.push("动态生成,动态加载调用方法"); ga.invokeVirtual(Type.getType(PrintStream.class), Method.getMethod("void println(String)")); ga.returnValue(); ga.endMethod(); byte[] code = cw.toByteArray(); OutputStream fos = new FileOutputStream("D:/myworkspace/JavaAsm/bin/com/shihuan/method/AccountMethod.class"); fos.write(code); fos.close(); } }
发表评论
-
Asm更改类名
2014-06-11 13:58 1148http://www.oschina.net/code/sni ... -
Java字节码删除或者添加一个类成员
2014-05-30 13:29 1501以下代码需要asm-5.0.2.jar和asm-commons ... -
JAVA字节码对照表
2014-05-30 11:05 2673http://www.ibm.com/developerwor ... -
Java字节码实现Aop(续二)
2014-05-29 15:28 1558以下代码需要asm-5.0.2.jar和asm-commons ... -
Java字节码实现Aop(续一)
2014-05-29 10:43 1431以下代码需要asm-5.0.2.jar和asm-commons ... -
Java字节码实现Aop
2014-05-25 12:00 1294以下代码需要asm-5.0.2.jar和asm-commons ... -
Java字节码
2014-05-18 15:33 963http://asm.ow2.org/index.html ...
相关推荐
BCEL(Byte Code Engineering Library)是Java开发的一个重要工具,主要用于处理Java字节码。它为开发者提供了一种深入理解与操作Java类文件的底层机制,允许分析、创建、修改和优化字节码。在软件工程中,BCEL在...
Java字节码是Java平台的一种独特特性,它使得Java程序具有跨平台的兼容性和高度的安全性。字节码是Java虚拟机(JVM)能够理解的低级指令集,每条字节码指令对应一种特定的操作。在Java中,我们可以使用字节码技术来...
使用JByteMod需要一定的Java字节码知识,但它的直观界面和丰富的功能使得这个过程相对平易近人。无论是开发、调试还是研究,JByteMod都是一个强大的工具,能够帮助开发者更深入地理解和操作Java程序。
Java字节码操作库BCEL(Byte Code Engineering Library)是一个强大的工具,用于分析、修改和创建Java类文件。它是Apache软件基金会的Jakarta项目的一部分,为开发者提供了对字节码的底层控制,使得开发者能够在运行...
Java字节码编辑是Java开发中的一个高级主题,它允许开发者在运行时修改或增强类的行为。`javassist`库正是这样一个工具,它为Java字节码操作提供了一个简洁的API,试图降低这个过程的复杂性。在Java世界中,字节码...
**JAVA字节码操作库 BCEL** BCEL(Byte Code Engineering Library)是Java平台上的一款开源库,主要用于处理Java字节码。它提供了对字节码的解析、创建、修改和分析的能力,使得开发者能够深入理解并操作Java类文件...
这个工具允许开发者直接对这些字节码进行修改,提供了深入到程序底层操作的可能性,对于调试、优化或者学习Java字节码有极大的帮助。 "JDK8亲测可用"表明这个工具至少兼容到Java 8版本,这意味着它应该能处理基于...
Java字节码框架ASM是一个强大的库,它允许程序员在运行时动态生成和修改Java类和接口的字节码。ASM提供了对JVM字节码的底层访问,这使得开发者能够实现诸如AOP(面向切面编程)或者元编程等高级功能。 首先,我们...
Java字节码工程工具包,通常被称为Javassist,是一个强大的开源项目,它为Java开发者提供了在运行时操作和分析类以及字节码的能力。这个工具包被广泛应用于动态代理、AOP(面向切面编程)、代码生成以及单元测试等...
`jclasslib` 是一款强大的Java字节码查看和编辑工具,尤其适合Java开发者在处理已编译的`.class`文件时使用。它允许我们深入理解类文件的结构,甚至对字节码进行修改,这对于调试、优化、学习Java虚拟机(JVM)的...
在上述代码中,`MyClassAdapter`是一个实现了`MethodVisitor`接口的类,它会遍历类中的每个方法,并根据需求添加、修改或删除字节码指令。这就是我们实际修改字节码的地方。 总结来说,通过创建Gradle插件并利用...
接下来,我们引入ASM库,这是一个强大的Java字节码操控和分析框架。ASM允许开发者在运行时动态生成和修改类。通过ASM,我们可以: - 创建全新的类、接口或继承已有类的子类。 - 修改已有的类,添加、删除或修改方法...
首先,Javassist是一个开源的Java字节码操作框架,它使得开发者可以在运行时或编译时方便地修改Java类。通过Javassist,我们能够动态创建新的类、接口,或者修改已存在的类的结构,包括添加、修改或删除方法和字段。...
ASM是一个底层的库,它直接操作Java字节码,这使得开发者能够在运行时改变类的行为或创建新的类。本文将深入探讨ASM框架的核心概念、如何使用ASM以及一个简单的代码示例。 一、ASM框架介绍 ASM是一个开源的Java...
Java字节码操作库BCEL(Byte Code Engineering Library)是Apache软件基金会提供的一个开源项目,主要用于解析、生成和修改Java字节码。在深入理解BCEL之前,我们首先要明白Java字节码的概念。Java字节码是Java源...
Java 修改 Class 文件工具有很多,其中“JBE”(全称可能为 Java Bytecode Editor 或类似)是一个专门用于查看和编辑 Java 字节码的工具。它允许开发者在编译后的级别上操作 Java 类,这对于调试、逆向工程、优化...
JavaAssist是一个强大的Java字节码操作库,它允许开发者在运行时动态地修改或创建新的Java类。这个jar包的最新版本是在4月16日更新的,提供了最新的功能和改进,对于需要进行字节码操作的Java开发工作尤其有用。 在...
这些库能够解析并操作Java字节码,允许在运行时动态插入、修改或删除代码片段。例如,ASM是一个底层的字节码操作框架,可以直接生成和分析字节码;ByteBuddy则提供了一种更友好的API,使得字节码增强过程更为简洁;...
Java反编译工具JBoss Javassist是一款强大的Java字节码操作库,它允许程序员在运行时修改类或者创建新的类。Javassist是Java字节码操纵和分析框架,常用于动态代理、AOP(面向切面编程)以及逆向工程等场景。通过这...
JBE是一个开源的字节码编辑器,它支持对Java字节码进行直接编辑,包括修改方法体、常量池、添加或删除类、方法和字段。与JClassLib类似,JBE为没有源代码的Java程序提供了一种修改机制,特别适用于逆向工程、调试和...