附加到已经运行的 JVM

2024-06-18

有没有办法附加到已经运行的 JVM?

例如,在 JNI 中您可以使用JNI_CreateJavaVM创建一个虚拟机并运行一个 jar 并检查它的所有类..

但是,如果 jar 已经在运行,我找不到附加到其 JVM 并与其类通信或获取其的方法env指针..

另一个问题是,如果 jar 加载我的本机库 (.dll) 并且我想在 .dll 内创建 JVM,我不能..也不能在 jar 不调用我的函数的情况下附加 jar 的当前 JVM。

Java端的例子:

class Foo
{
    static {loadLibrary("Foo")}
}

在 C++ 方面:

void Foo()
{
    //CreateJVM
    //Attach to the current process..
    //Call function from the jar that loaded me.
}

如果没有 jar 调用,这是无法完成的Foo first.

有任何想法吗?是否没有办法获取当前 JVM 或附加到它或外部 JVM 实例?


是的你可以。

1)在托管 JVM 的进程中注入 DLL(例如,java.exe, or javaw.exe, or iexplore.exe)。常见的注射技术是使用设置WindowsHookEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990.aspx

2)在DLL中,获取模块句柄jvm.dll using GetModuleHandle

3)获取地址JNI_GetCreatedJavaVMs函数,使用GetProcAddress

4)调用该函数,如果成功,则使用以下命令将线程附加到找到的第一个 JVMAttachCurrentThread函数指针来自JavaVM结构。

5) Done.

有用的链接:调用API http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

附加到已经运行的 JVM 的相关文章

随机推荐

  • NumPy 和 memmap:[Errno 24] 打开文件太多

    我正在处理大型矩阵 因此我使用 NumPy memmap 但是 我收到错误 因为显然 memmap 使用的文件描述符没有关闭 import numpy import tempfile counter 0 while True temp fd
  • 修改附加套件中 Firefox 下载对话框的内容

    我希望能够在开始文件下载时在 Firefox 中弹出的下载对话框中添加一个选项 是否可以使用新的附加 SDK 来执行此操作 还是必须使用旧方法 编辑 显然 如果选择了新选项 我需要一种方法来了解它并基于它执行代码 这就是你会用的东西XUL
  • 使用 Django 从标准输出返回 pdf 响应

    我正在使用 wkhtmltopdf 创建 PDF 文件 但是我不知道如何正确返回它们 所以我必须将它们写入我的媒体文件夹 然后重定向到刚刚创建的文件 编辑 Ian 的建议是写入 STDOUT 因此我更改了 wkhtmltopdf 命令来执行
  • 从 csv 文件中读取奇数行

    这看起来相当简单 我只需要从 R 中的数据文件中读取奇数行并创建一个新的数据框 我怎样才能实现这个目标 read csv filename csv c TRUE FALSE 怎么运行的 功能read csv用于读取整个文件并返回包含所有行的
  • 对数据进行分布拟合 - MATLAB

    我正在尝试对从显微镜图像中收集的一些数据进行分布 我们知道 152 左右的峰值是由于泊松过程造成的 我想将分布拟合到图像中心的大密度 同时忽略高强度数据 我知道如何将正态分布拟合到数据 红色曲线 但它不能很好地捕获右侧的重尾 尽管泊松分布应
  • 如何在 PHP 中获取 html 中的文件路径?

    有人可以告诉我如何使用 html 获取文件路径
  • Google App Engine 实例不断快速关闭

    所以我已经使用应用程序引擎很长一段时间了 没有任何问题 我知道 如果应用程序有一段时间没有被访问者点击 那么实例将关闭 并且第一个访问该网站的访问者将有几秒钟的延迟 同时新实例启动 然而 最近这些实例似乎只在很短的时间内保持活动状态 有时不
  • Webpack 4、postcss-loader 和 autoprefixer 插件

    我在尝试让自动前缀器工作时感到非常沮丧 这是我的webpack config js const HtmlWebPackPlugin require html webpack plugin const MiniCssExtractPlugin
  • 为什么 Dijkstra 算法使用减密钥?

    Dijkstra 教给我的算法如下 while pqueue is not empty distance node pqueue delete min if node has been visited continue else mark
  • 阻止UAC虚拟化?

    我有一个 VB6 应用程序 我已经销售了 12 年多了 有时 我的用户很难让应用程序运行 数据写入将进入 My Documents 因此除了安装文件 EXE 等 之外什么都不会进入 C Program Files 或 C Program F
  • 为什么 Tomcat 缺少内置的速率限制过滤器?

    从几个来源 1 https serverfault com questions 177742 2 http tomcat 10 x6 nabble com tomcat bandwidth limiter transfer rate lim
  • 将 ActionBarSherlock 与新的 SupportMapFragment 结合使用

    我正在考虑使用 ActionbarSherlock 但有一个查询阻碍了我 所以我的应用程序需要完全向后兼容 API Level 7 我需要在我的应用程序中实现新的 Google 地图 为此我需要使用 SupportMapFragment 类
  • 如何在 Flask 中调用不同蓝图的方法?

    我有一个具有多个蓝图模块的应用程序 我想调用一个方法 路径 该方法通常会从不同蓝图的路径中返回视图或渲染模板 如何才能正确完成此操作 谢谢 视图只是函数 导入该函数并直接调用它 传入它可能定义的任何路由参数 蓝图的作用是更轻松地在公共前缀下
  • 为什么 Github API 只返回前 100 个监视的存储库?

    我正在 Github 上查看 392 个存储库 然而 Github API 只返回 100 有人知道为什么吗 https github com api v2 json repos watched trivektor https github
  • 将 `new Date ()` 存储在 JSON 对象中

    我有以下字段验证器对象 type date min new Date 我希望我可以存储new Date 作为 JSON 中的表达式 解析时会执行 保存时间戳 type date min new Date getTime 然后你再读一遍 va
  • 向无锁队列添加阻塞函数

    我有一个基于循环缓冲区的无锁多生产者 单消费者队列 到目前为止 它只有非阻塞push back and pop front 来电 现在我想添加这些调用的阻塞版本 但我想尽量减少这对使用非阻塞版本的代码性能的影响 也就是说 它不应该将它们变成
  • 用反射“铸造”

    考虑以下示例代码 class SampleClass public long SomeProperty get set public void SetValue SampleClass instance decimal value valu
  • ABPeoplePickerNavigationController - 在不使用私有方法/属性的情况下删除“取消”按钮?

    我正在使用 ABPeoplePickerNavigationController 它是 UINavigationController 的子类 在我使用它的上下文中 右侧的默认导航栏按钮 取消 没有任何意义 我找不到禁用或隐藏它的方法 并且无
  • 隐藏特定用户的报告

    我做了一个向下钻取报告包含 5子报告 所有这些都使用连接超级链接部分 我希望用户只查看主要内容向下钻取报告 我的意思是第一个标签向下钻取 如果我设置仅执行的许可ROLE USER 该特定报告不起作用 抛出类似错误Access Denied
  • 附加到已经运行的 JVM

    有没有办法附加到已经运行的 JVM 例如 在 JNI 中您可以使用JNI CreateJavaVM创建一个虚拟机并运行一个 jar 并检查它的所有类 但是 如果 jar 已经在运行 我找不到附加到其 JVM 并与其类通信或获取其的方法env