可以读取正在运行的java应用程序的内存吗?
我想学习如何(或者如果可能的话)通过编程与黑盒java应用程序交互(通过读取其数据)。以前有没有做过这样的研究/工作
我认为在JVM上运行会使事情变得非常复杂
@anon:这与任何JVM都相关。您必须知道或控制JVM如何分配内存以从java应用程序提取数据的细节吗
你可以在下面搜索框中键入要查询的问题!
我想学习如何(或者如果可能的话)通过编程与黑盒java应用程序交互(通过读取其数据)。以前有没有做过这样的研究/工作
我认为在JVM上运行会使事情变得非常复杂
@anon:这与任何JVM都相关。您必须知道或控制JVM如何分配内存以从java应用程序提取数据的细节吗
# 1 楼答案
你可以调查一下。只要您了解应用程序的类结构,它将允许您修改已经运行的JVM中的方法,并且您可能能够设计一种方法,允许您提取或插入足够的数据以进行通信(当然,这取决于可用的方法)
# 2 楼答案
麦吉尔大学的Sable小组为Java世界贡献了大量研究
很多工作都已经过时了,但是您可能会在他们的EVolve项目中找到一些帮助,该项目的目标是可视化面向对象的程序。他们的一些项目似乎得到了积极的维护(比如Soot,他们的Java优化框架),所以你可能会发现直接联系他们很幸运
# 3 楼答案
HotSpot JVM允许您从探查器(参见Open Source Java Profilers或类似Your Kit的商业广告)连接agentlib,然后您可以在探查器中检查内存/cpu/线程等。 如果您想要非常具体的东西,您可能需要制作自己的agentlib,它可以向您发送所需jvm的信息
# 4 楼答案
例如,使用StackTrace很容易做到这一点。它可以附加到java进程,让您使用BeanShell检查和更改几乎所有内容
# 5 楼答案
我相信你要找的是Eclipse MAT的功能。您可能想看看源代码