Javassist简单应用 - 不用学习JVM知识也可以修改class文件
来源:互联网 发布:智阅pdf阅读器 源码 编辑:程序博客网 时间:2024/06/02 07:52
------------------------------------------------
package rocks;
import javassist.*;
public class TestAssist {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("com.sun.kvem.environment.EmulatorWrapper");
CtMethod m = cc.getDeclaredMethod("main");
m.insertBefore("{ "
+ "java.io.File f = new java.io.File(\"log.txt\"); "
+ "java.io.OutputStream os = new java.io.FileOutputStream(f); "
+ "java.io.PrintStream out = new java.io.PrintStream(os); "
+ "out.println(java.util.Arrays.asList($1)); "
+ "out.close(); "
+ "}");
cc.writeFile();
}
}
----------------------------------------------------
编译
javac -cp c:\apps\javassist-3.7\javassist.jar;bin -d bin src\rocks\*.java
运行,也就是对class进行修改
java -cp c:\apps\javassist-3.7\javassist.jar;bin rocks.TestAssist
屏蔽重定向代码:
------------------------------------------------------
package rocks;
import javassist.*;
import javassist.expr.*;
public class TestAssist {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get(args[0]); // "com.sun.kvem.environment.EmulatorWrapper$UIExecutor"
CtMethod m = cc.getDeclaredMethod(args[1]); //"runInGUI"
m.instrument(new ExprEditor() {
public void edit(MethodCall m) throws CannotCompileException {
String clzname = m.getClassName();
String mtdname = m.getMethodName();
if ("java.lang.System".equals(clzname) && "setOut".equals(mtdname)) {
//m.replace("{ $1 = System.out; $proceed($$); }");
m.replace("{ }");
}
if ("java.lang.System".equals(clzname) && "setErr".equals(mtdname)) {
//m.replace("{ $1 = System.err; $proceed($$); }");
m.replace("{ }");
}
//System.out.println(m.getClassName() + "." + m.getMethodName() + ":" + m.getLineNumber());
}
});
cc.writeFile();
}
...
}
- Javassist简单应用 - 不用学习JVM知识也可以修改class文件
- 使用javassist修改class文件
- 使用Javassist对.class文件进行修改
- 使用Javassist对.class文件进行修改
- 利用javassist修改.class文件,并重新打包
- gradle学习二 利用javassist api修改class字节码
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用总结
- Javassist简单应用小结
- Javassist简单应用小结
- 修改Vista盘符 不用任何工具也可以搞定
- 不用MFC也可以查内存泄露,简单好用。
- 不用工具也可以隐藏你的文件
- java反编译软件jd-gui.exe以及使用javassist修改class文件 .
- 使用Javassist对.class文件进行修改(AOP面向切面编程)
- 不用扫描仪也可以“扫描”
- 【2.0版本cocos2d-iphone 开发之各种常见错误合集】
- 安装rational rose 2003 破解及汉化方法
- joomla组件开发——会员积分管理组件的登陆跳转
- 循环队列与优先级队列的Java实现
- 分页的原理和实现(代码)
- Javassist简单应用 - 不用学习JVM知识也可以修改class文件
- 程序员要记住:求人不如求己
- 使用 Ratinal Purecoverage 进行 C++ 代码覆盖率分析
- UML——实现图
- 在J2ME中实现高效高质缩小图片
- 如何学好C++语言(转)
- 如何学好C语言(转)
- 丽思·卡尔顿:是如何创造出忠诚顾客人均120万美元的终身消费的?
- 设计模式之建造者模式