Javaagent:简单的使用-javaagent输出加载的类
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javaagent:简单的使用-javaagent输出加载的类相关的知识,希望对你有一定的参考价值。
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打开并将其替换即可
再次运行
正常运行
以上是关于Javaagent:简单的使用-javaagent输出加载的类的主要内容,如果未能解决你的问题,请参考以下文章