Javaagent:简单的使用-javaagent输出加载的类

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javaagent:简单的使用-javaagent输出加载的类相关的知识,希望对你有一定的参考价值。

1. 声明

当前内容主要为本人学习-javaagent,本人由于多次看到(输入java的时候发现,破解idea的时候发现了),所以了解这个的作用

当前内容主要为:

  1. 创建自己的-javaagent的类,并打包
  2. 在另外一个运行的main方法上使用这个jar包
  3. 主要实现类打印功能

当前内容部分参考:博文

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输出加载的类的主要内容,如果未能解决你的问题,请参考以下文章

一个最简单的javaagent demo实例

一个最简单的javaagent demo实例

一个最简单的javaagent demo实例

JavaAgent简单学习

字节码javaagent 入门 案例 最简单的案例

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程