我在内存中加载了一个程序。现在我想直接访问内存并为该程序更改内存中的 OPCODE 和 DATA。为此,我需要编写一个 Java 程序。
你能告诉我这是否可行吗?如果是,请告诉我如何编写这样的程序。
提前致谢!
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我知道我必须在这里发布链接的一些内容,但由于文章非常详细,我跳过了那部分