我听说有一种方法可以从内存中读取值(只要内存由JVM控制)。
但是,例如,如何从地址8E5203获取字节?有一种称为getBytes(long)的方法。我可以用这个吗?

非常感谢!
皮特

最佳答案

您不能直接访问任何存储位置!它必须由JVM管理。安全异常或EXCEPTION_ACCESS_VIOLATION都会发生。这可能会使JVM本身崩溃。但是,如果我们从代码中分配内存,则可以访问字节。

public static void main(String[] args) {
     Unsafe unsafe = null;

        try {
            Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
            field.setAccessible(true);
            unsafe = (sun.misc.Unsafe) field.get(null);
        } catch (Exception e) {
            throw new AssertionError(e);
        }

        byte size = 1;//allocate 1 byte
        long allocateMemory = unsafe.allocateMemory(size);
        //write the bytes
        unsafe.putByte(allocateMemory, "a".getBytes()[0]);
        byte readValue = unsafe.getByte(allocateMemory);
        System.out.println("value : " + new String(new byte[]{ readValue}));
}

关于memory - sun.misc.Unsafe:如何从地址获取字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1490760/

10-11 04:53