使用Java访问内存

kaj*_*igd 6 java memory opcode

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

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

提前致谢!

Lit*_*ild 6

Java不是为此而设计的.
Java的主要目标是让JV​​M为您管理内存.因此,您的程序是沙盒.

但是,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回答更多的细节:/sf/ask/390196901/

非官方文档:http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/
Absolute Beginners'Guide http://java-performance.info/string-packing -converting-characters-to-bytes/
http://javapapers.com/core-java/address-of-a-java-object/

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