【问题标题】:How do I access the memory used by a Java program?如何访问 Java 程序使用的内存?
【发布时间】:2013-02-04 12:37:10
【问题描述】:

我想访问 Java 变量当前使用的内存位置。我计划使用 C 或其他语言访问这些位置,并计划更改位置值。

将访问 Java 程序的程序无法控制该程序;它会通过搜索内存来完成这项任务。

我需要关于如何编写第二个程序的建议。

【问题讨论】:

  • 为了便于阅读,您需要重新措辞。
  • 对不起我的英语很差
  • 这是“你真正想要做什么”的问题之一。因为从程序外部修改任何程序的数据几乎是做任何事情的坏方法。
  • 你为什么要这样做?
  • 不可能侵入另一个未编码为协作并共享其本地数据的 Java 进程。与许多其他语言一样,方法本地的大多数变量都分配在堆栈上,并且每次执行方法时可能具有不同的地址。一个对象驻留在堆中的一个随机位置。它的所有设计都是为了抵抗您尝试编写的程序类型。

标签: java memory operating-system jvm java-native-interface


【解决方案1】:

你本质上是想写一个debugger

Java 有一个内置的调试工具,称为JPDA。但是,通常需要使用允许调试器附加的选项来启动被调试的进程。如果你能做到这一点,那就太好了。

JMap 程序可以附加到正在运行的进程。我没有深入研究它,但似乎有一种方法可以通过 Sun Tools JAR 中的类将调试代理加载到该进程中。当然,这只适用于 Sun/Oracle JVM(或 OpenJDK)。

第三种选择是完全跳出 JVM,并使用像 gdb 这样的工具。要走这条路,您需要了解JVM implementation。我不确定分布式可执行文件中还剩下多少调试信息,但是一旦您对构建足够熟悉,您就可以确定一个入口点。

当然,操作系统会强制执行访问规则,因此如果要被黑客入侵的进程以其他用户身份运行,而您不是超级用户,那么您就不走运了。

【讨论】:

  • 谢谢,这正是我要找的
  • 我无法想象您实际上有时间在两分钟内阅读并理解所有这些链接......
  • 我对 JPDA 有过想法,但我之前没有想到这个想法
【解决方案2】:

编辑:

我错过了 Java 方面必须不知道内存访问的情况。对于这种情况,请参阅 https://stackoverflow.com/questions/5574241/interesting-uses-of-sun-misc-unsafe 了解如何获取 JVM 内存的原始地址。

【讨论】:

    【解决方案3】:

    Parsifal 说得对。 . .

    也就是说 JNI 就是你的答案。使用 JNI,您可以在 java 中调用 C 可执行文件来处理您想要共享内存的所有逻辑。到那时,只需在用 C 编写的线程之间进行典型的 IPC。

    这可能又快又脏(调试起来很痛苦),但您可以将数据作为参数传递而不会太麻烦,但要准备做一些多线程。

    或者,您可以使用与 JMS 兼容的消息传递引擎,例如 ActiveMQ。您可以将数据序列化为可用的某种消息,然后 Java 可以将其广播给正在收听的任何人。 (可能是 1000 个客户端,也可能是 0——Java 不必知道它)但是这需要一些额外的设置。我相信 AMQ 至少会在本地设置一个 Jetty 服务器来做这件事。

    最后(正如下面评论中所建议的那样),如果您的数据足够简单,您可以随时制作一个交换文件(即一个普通的旧文件来保存您的数据。)只需在数据可用时将其写出,然后这样,只要当前没有被写入,任何其他具有权限的进程都可以访问它。

    【讨论】:

    • 但是原来的java程序不知道其他进程正在查看它的内存
    • 啊哈!它不一定是,但你需要运行多个进程。 (一个用于 Java 做它的事情,另一个用于同时使数据可用)那么怎么样,您也可以在文件可用时将数据写入文件,这样任何其他有权限的人都可以访问它(考虑到它当前没有被写入)
    • 所以我应该用jni编写另一个java程序,它会调用本地函数来操作第一个java进程的内存,对吧?
    • 这真的取决于你的应用程序。您能详细说明您要完成的工作吗?什么样的数据?多少钱?
    • 我上传了一张图片作为说明
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 2011-02-06
    • 1970-01-01
    • 2013-07-29
    • 2016-08-16
    • 2016-10-21
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多