我有以下C#代码:
int num = Convert.ToInt32(this.Memory.ReadInt(
this.Memory.BaseAddress() + 0x80f0cc, new int[] { 12, 0x6c5c }));这将从内存中读取数据,并给出整数值。
这在Java中有可能实现吗?我试着在网上搜索,但什么也找不到。
发布于 2015-02-02 21:33:17
不,Java是专门设计来禁止这样的.但是..。
它不是官方支持的(并且它的工作方式/是否工作可能在不同的JVM实现中有所不同),但是sun.misc.Unsafe类允许人们做一些通常不应该做的事情。参见this article。
摘录:
@Test
public void testCopy() throws Exception {
long address = unsafe.allocateMemory(4L);
unsafe.putInt(address, 100);
long otherAddress = unsafe.allocateMemory(4L);
unsafe.copyMemory(address, otherAddress, 4L);
assertEquals(100, unsafe.getInt(otherAddress));
}unsafe.getInt(otherAddress)调用可能是您在纯Java中能实现的最接近的功能。
有一个关于Unsafe是否应该获得官方支持的survey in 2014,但我不确定结果会是什么(如果有的话)。
发布于 2015-02-02 21:28:37
不是的。不可能用纯Java代码访问本机内存。您可以使用JNA或JNI链接到本机库,它们可以访问任意内存,但是Java本身运行在虚拟机中,不允许您显式地访问虚拟机之外的或内的内存。
发布于 2015-02-02 21:30:59
https://stackoverflow.com/questions/28278698
复制相似问题