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