我剛剛寫了一段代碼,訪問內存,我用cheatengine檢查了地址(在代碼中),並且我用System.out打印了它,這是不同的。我知道這是一個很長的值,但是在十六進制中,值2是00000002(這是CheatEengine的結果),並且我用java獲得了844287491178496。那爲什麼呢?我如何將地址的值轉換爲int?更重要的是,用java來記憶我的紅色長久價值是什麼?繼承人是我的代碼:使用java的內存值
import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class Memory2 {
public static void main(String args[]){
Unsafe unsafe = getUnsafe();
long address = 0x002005C;
unsafe.getAddress(address);
System.out.println(unsafe.getAddress(address));
}
public static Unsafe getUnsafe() {
try {
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
return (Unsafe)f.get(null);
} catch (Exception e) {}
return null;
}
}
不是Java沙箱這個東西,所以它決定東西去哪裏,而不是讓你寫任何你想要的地方?看起來這是它的一個特點,爲了避免處理這類東西而來到地球上的地獄。 – RonaldBarzell
@ user1161318通常情況是這樣,但這是'Unsafe'類,它顧名思義就是圍繞這一切。 – biziclop
我懷疑這可能在它後面:'從給定的內存地址獲取本機指針。如果地址爲零,或者沒有指向從#allocateMemory獲得的塊,則結果是不確定的。「 – biziclop