6

我在内存中加载了一个程序。现在我想直接访问内存并为该程序更改内存中的 OPCODE 和 DATA。为此,我需要编写一个 Java 程序。

你能告诉我这是否可行吗?如果是,请告诉我如何编写这样的程序。

提前致谢!

4

2 回答 2

6

Java 不是为此而设计的。
Java 的主要目的是让 JVM 为您管理内存。因此,您的程序是沙盒的。

但是,HotSpot JVM 中似乎有一个后门:

Java 最初被设计为一个安全的托管环境。尽管如此,Java HotSpot VM 包含一个“后门”,它提供了许多低级操作来直接操作内存和线程。这个后门 - sun.misc.Unsafe - 被 JDK 本身广泛使用在 java.nio 或 java.util.concurrent 等包中。很难想象一个 Java 开发人员会在任何常规开发中使用此后门,因为此 API 极其危险、不可移植且易变。尽管如此,Unsafe 提供了一种简单的方法来查看 HotSpot JVM 内部结构并执行一些技巧。有时它很有趣,有时它可以用于研究 VM 内部而无需 C++ 代码调试,有时它可以用于分析和开发工具。

来源:http ://highlyscalable.wordpress.com/2012/02/02/direct-memory-access-in-java/

然而Unsafe,该类是无证的。您可能想查看此 SO 答案以了解更多详细信息:https ://stackoverflow.com/questions/5574241/interesting-uses-of-sun-misc-unsafe

非官方文档:http : //mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/
绝对初学者指南 http://java-performance.info/string-packing -converting-characters-to-bytes/
http://javapapers.com/core-java/address-of-a-java-object/

PS我知道我必须在这里发布链接的一些内容,但由于文章非常详细,我跳过了那部分

于 2013-10-17T05:30:31.200 回答
0

您不能直接在 java 中引用内存,因为它们在 java 中没有指针的概念,如 c/c++

你必须通过这个引用内存地址

希望能帮助到你。

于 2013-10-17T05:47:21.237 回答