1. 声明
当前内容主要为本人学习-javaagent,本人由于多次看到(输入java的时候发现,破解idea的时候发现了),所以了解这个的作用
当前内容主要为:
- 创建自己的-javaagent的类,并打包
- 在另外一个运行的main方法上使用这个jar包
- 主要实现类打印功能
当前内容部分参考:博文
2. 创建一个基本的agent并打包
package com.hy.vmopt;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
/**
*
* @author hy
* @createTime 2021-06-19 11:20:50
* @description 当前内容主要为测试和使用当前的-javaagent
*
*/
public class JavaAssigentTest {
public static void premain(String args, Instrumentation instrumentation) {
MyClassFileTransformer transformer = new MyClassFileTransformer();
instrumentation.addTransformer(transformer);
}
public static class MyClassFileTransformer implements ClassFileTransformer {
@Override
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
System.out.println("已加载:" + className);
return classfileBuffer;
}
}
}
直接使用eclipse打包,并输出,不要指定主要类,直接打成jar包就可以了
3. 最简单的入口类(主要为了测试)
/**
*
* @author hy
* @createTime 2021-06-19 11:29:42
* @description
*
*/
public class JavaAssigentRunTest {
public static void main(String[] args) {
System.out.println("当前内容测试javaassigent......");
}
}
4. 配置运行时的vm参数
-javaagent:C:\Users\admin\Desktop\myAssigent.jar
5. 运行
缺少属性:Premain-Class:
查看该MANIFEST文件
发现果然没有,所以开始添加该内容如下
最后使用winrar打开并将其替换即可
再次运行
正常运行