当前位置: 首页 > news >正文

网站建设涉及和描述的一些问题哈尔滨模板建站定制网站

网站建设涉及和描述的一些问题,哈尔滨模板建站定制网站,wordpress自定义小工具,wordpress程序分析分为两种 程序运行前的agent#xff1a;premain 程序运行中的agent#xff1a;agentmain 在程序运行前的agent javaagent是java命令的一个参数#xff0c;所以需要通过-javaagent 来指定一个jar包#xff08;就是我们要做的代理包#xff09;能够实现在主程序运行前来执行…分为两种 程序运行前的agentpremain 程序运行中的agentagentmain 在程序运行前的agent javaagent是java命令的一个参数所以需要通过-javaagent 来指定一个jar包就是我们要做的代理包能够实现在主程序运行前来执行我们jar中的方法 1.pom文件中 pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.5.1/version!-- 指定maven编译的jdk版本。若不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 --configurationsource8/sourcetarget8/target/configuration/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion3.2.0/versionconfigurationarchive!--自动添加META-INF/MANIFEST.MF --manifestaddClasspathtrue/addClasspath/manifestmanifestEntriesMenifest-Version1.0/Menifest-Version!-- Agent-classexample.AgentMain/Agent-class --!-- 必须存在 --Premain-Classexample.PreMainAgent/Premain-ClassCan-Redefine-Classestrue/Can-Redefine-ClassesCan-Retransform-Classestrue/Can-Retransform-Classes!-- Manifest-Versiontrue/Manifest-Version--!-- Can-Set-Native-Method-Prefixtrue/Can-Set-Native-Method-Prefix--/manifestEntries/archive/configuration/plugin /plugins也可以使用META-INF/MANIFEST.MF文件 Manifest-Version: 1.0 Can-Redefine-Classes: true Can-Retransform-Classes: true Premain-Class: com.example.PreMainAgent 注意 最后需要多一行空行Can-Redefine-Classes true表示能重定义此代理所需的类 默认值为 false可选Can-Retransform-Classes true 表示能重转换此代理所需的 类默认值为 false 可选Premain-Class 包含 premain 方法的类类的全路径名 程序运行前的agent:PreMainAgent 类 方法名称必须为premain 加载顺序为 premain(String agentArgs,Instrumentation inst) 若找不到则执行 premain(String agentArgs) public class PreMainAgent {public static void premain(String agentArgs,Instrumentation inst) {System.out.println(agent参数:agentArgs);} }将此服务打成jar包 创建另一个简单的maven项目 public class Application {public static void main(String[] args) {System.out.println(main 运行 );} }启动运行时增加 -javaagent:D:\agent-demo-1.0-SNAPSHOT.jaroption1value1 运行结果 agent参数:k1v1 main 运行 在程序运行中的agent:agentmain类 基础的maven项目 public class AgentMain {public static void agentmain(String agentArgs, Instrumentation inst) {inst.addTransformer(new DefineTransformer(),true);System.out.println(----------我是agentmain);System.out.println(----------agentArgs agentArgs);} }addTransformer、getAllLoadedClasses,retransformClasses 方法 addTransformer 用于注册Transformer 可以通过编写ClassFileTransformer 接口的实现类来注册我们自己的转换器 类加载的时候会进入我们自己的Transformer中的transformer 函数进行拦截此处如果不需拦截也可以不处理 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.security.ProtectionDomain; import java.util.Scanner;public class DefineTransformer implements ClassFileTransformer {public byte[] transform(ClassLoader loader, String className, Class? classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {Scanner sc new Scanner(System.in);System.out.println(Injected Class AgentMainDemo Successfully !);System.out.print( );try {InputStream is Runtime.getRuntime().exec(sc.next()).getInputStream();BufferedReader br new BufferedReader(new InputStreamReader(is));String line;StringBuilder sb new StringBuilder();while ((line br.readLine()) ! null){sb.append(line).append(\n);}System.out.println(sb);} catch (IOException e) {e.printStackTrace();}return classfileBuffer;} }getAllLoadedClasses 用于列出所有已加载的class 可以通过遍历class数组来寻找我们需要重新定义的class public static void agentmain(String agentArgs, Instrumentation inst) {inst.addTransformer(new DefineTransformer(),true);System.out.println(----------监控探针);Class[] allClass inst.getAllLoadedClasses();for (Class c : allClass) {System.out.println(c.getName());} }retransformClasses 能对已加载的class进行重新定义如果目标类已经被加载了可以调用此函数重新触发这个拦截能够达到对已加载的类进行字节码修改的效果。 public static final String ClassName org.apache.catalina.core.ApplicationFilterChain;public static void agentmain(String agentArgs, Instrumentation inst) {inst.addTransformer(new DefineTransformer(), true);System.out.println(----------监控探针);Class[] allClass inst.getAllLoadedClasses();for (Class c : allClass) {if (c.getName().equals(ClassName)) {try {System.out.println(Inject class exit : ClassName);//agentmain 是JVM运行时需要调用 retransformClasses 重定义类 inst.retransformClasses(c);} catch (UnmodifiableClassException e) {throw new RuntimeException(e);}}} }在pom文件里添加 pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.5.1/version!-- 指定maven编译的jdk版本。若不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 --configurationsource8/sourcetarget8/target/configuration/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion3.2.0/versionconfigurationarchive!--自动添加META-INF/MANIFEST.MF --manifestaddClasspathtrue/addClasspath/manifestmanifestEntriesMenifest-Version1.0/Menifest-VersionAgent-classexample.AgentMain/Agent-class!-- Premain-Classexample.PreMainAgent/Premain-Class--Can-Redefine-Classestrue/Can-Redefine-ClassesCan-Retransform-Classestrue/Can-Retransform-Classes!-- Manifest-Versiontrue/Manifest-Version--!-- Can-Set-Native-Method-Prefixtrue/Can-Set-Native-Method-Prefix--/manifestEntries/archive/configuration/plugin /plugins打成jar包备用 在另一个项目中添加 import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.VirtualMachineDescriptor;import java.util.List;public class AttachMain {public static void main(String[] args) throws Exception{// 生成jar包的绝对路径String path E:\\test-1.0-SNAPSHOT.jar;// 列出已加载的jvmListVirtualMachineDescriptor list VirtualMachine.list();// 遍历已加载的jvmfor (VirtualMachineDescriptor v:list){// 打印jvm的 displayName 属性System.out.println(v.displayName());// 如果 displayName 为指定的类if (v.displayName().contains(AttachMain)){// 打印pidSystem.out.println(id v.id());// 将 jvm 虚拟机的 pid 号传入 attach 来进行远程连接VirtualMachine vm VirtualMachine.attach(v.id());// 将我们的 agent.jar 发送给虚拟机vm.loadAgent(path);// 解除链接vm.detach();}}} }注意此处tools不会自动加载需要pom文件里手动加载 dependencygroupIdcom.sun/groupIdartifactIdtools/artifactIdversion1.8/versionscopesystem/scopesystemPath${java.home}/../lib/tools.jar/systemPath /dependency运行即可看到 说明已经成功 此时可以启动你的服务然后修改displayname的判断条件即可对系统服务是否运行进行监控 后面的服务相当于把上面的jar包挂载到你需要的服务上可以触发jar包中的代码
http://www.pierceye.com/news/353672/

相关文章:

  • 电子网址怎么创建下载优化大师app
  • 网站上传服务器教程wordpress 开启多用户
  • 做网站的公司重庆互联网营销方式
  • 在线探测网站开发语言东莞人才市场现场招聘会地址
  • 检测网站是否被挂黑链seo网站营销推广
  • 当今网站开发技术的现状自己做的网站怎么上排行榜
  • 外贸没有公司 如何做企业网站?成都市住房和城乡建设局官网查询
  • 公证网站建设管理无锡百度正规推广
  • 免费海外网站建设自学设计软件的免费网站
  • 个人姓名最多备案多少个网站外贸网站制作公司
  • 上海市建设安全协会官方网站上海人才网官网公示
  • 原创文章网站wordpress注册页面修改密码
  • 山东省建设注册执业中心网站博物馆网站做的最好的
  • 做论坛网站能赚钱吗山东济南网站建设公司
  • 建网站海外英文建站
  • 学网站开发网页制作苏州模板建站哪家好
  • 音乐网站建设怎么上传音乐易点租电脑租赁官网
  • 做足球网站前景一个网站源码值多少钱
  • 成都网站排名优化公司上海创意网站建设
  • 贵阳市住房城乡建设局八大员网站wordpress 输出 文章时间
  • 那个装修公司的网站做的好想创业去哪里找项目
  • 公选课网页制作与网站建设网页游戏平台十大排名
  • 无锡锡牛网站建设网站倒计时
  • 南通做外贸网站网站建设培训四川
  • 微小店适合卖做分类网站吗手机开发者网站
  • 广州建企业网站网页设计是啥意思
  • wap手机网站建设刀模 东莞网站建设
  • 怎样做网站的外链做推广优化的网站有哪些内容
  • 永嘉规划建设局网站备案个人网站做淘宝客
  • 枣庄网站建设电话网站怎么做 凡科