我正在写一个Java代理与JVMTI进行交互。由于我不会涉及的原因,我需要使用JVMTI(java
进程中的C接口),而不是像java.lang.instrument
或JDI这样的Java API。我希望能够做一些似乎不被直接支持的事情。Java代理与jvmti在运行时加载,从内部卸载
- 有没有办法在Java进程启动后加载代理?
- 有没有办法从JVMTI代码内部或从进程外部卸载Java代理(不会杀死整个Java进程)?例如,如果我能找到动态加载模块的句柄,我可以从JVMTI代码中安全地调用
dlclose()
吗?
如果这些操作无法完成,有没有办法在加载后将数据传递给Java代理?有没有通过一些Java命令行实用程序来完成此操作的正常方法?如果没有,我可以安全地创建一个线程并使用代理中的标准C或C++库调用来监听套接字吗?
如果有帮助,不用担心支持Windows与你的答案 - 我从事这个项目扩展仅限Unix调试工具。
说明:我已经看过this但认为可能有一些正常的方式来做到这一点,它不是JVMTI标准。