首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行JVM中注入Jar和替换类

在运行JVM中注入Jar和替换类
EN

Stack Overflow用户
提问于 2017-04-01 14:17:56
回答 1查看 2.9K关注 0票数 0

我希望能够替换一些类并向已经运行的JVM中添加一些类。我读到我需要使用CreateRemoteThread,但我没有完全理解它。我读过这篇关于如何做它的文章(软件RnD),但我不知道它能做什么以及为什么。除此之外,它只引入新的类,而不改变现有的类。我怎样才能用C++做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-02 03:47:39

您甚至不需要CreateRemoteThread --有一种官方方法可以连接到远程JVM并使用附加API替换加载的类。

  1. 您需要一个调用Java代理Instrumentation.redefineClasses。 公共静态空代理(String,throws )抛出异常{ Class oldClass = Class.forName("org.pkg.MyClass");路径newFile = Paths.get("/ Path /to/MyClass.class");byte[] newData = Files.readAllBytes(newFile);instr.redefineClasses(新ClassDefinition(oldClass,newData)); 您必须添加带有MANIFEST.MF属性的Agent-Class,并将代理打包到jar文件中。

  1. 然后使用动态附加将代理jar注入正在运行的VM (使用process = pid)。 进口com.sun.tools.attach.VirtualMachine;VirtualMachine vm = VirtualMachine.attach(pid);尝试{ vm.loadAgent(agentJarPath,options);}最后{ vm.detach();} 在文章中有更多的细节。

如果您坚持使用C/C++而不是Java,您可以查看我的jattach实用程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43157989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档