import sun.misc.Unsafe;
import java.lang.reflect.Field;
public class Main {
/* too lazy to run with VM args, use Reflection */
Field f
= Unsafe.
class.
getDeclaredField("theUnsafe"); f.setAccessible(true);
/* get array address */
Unsafe unsafe = (Unsafe)f.get(null);
byte four_bytes[] = {25, 25, 25, 25};
long base_offset_bytes
= unsafe.
arrayBaseOffset(Object[].
class); long four_bytes_address = unsafe.getLong(trash, base_offset_bytes); // <- this is it
long ints_addr = unsafe.allocateMemory(16); // allocate 4 * 4 bytes, i.e. 4 ints
unsafe.copyMemory(four_bytes_address + base_offset_bytes, ints_addr, 4); // copy all four bytes
for(int i = 0; i < 4; i++) {
System.
out.
println(unsafe.
getInt(ints_addr
+ i
)); //run through entire allocated int[], // get some intestines
}
System.
out.
println("************************************"); for(int i = 0; i < 16; i++) {
System.
out.
println(unsafe.
getByte(ints_addr
+ i
)); //run through entire allocated int[], // get some intestines
}
}
}
aW1wb3J0IHN1bi5taXNjLlVuc2FmZTsKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBOb1N1Y2hGaWVsZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgLyogdG9vIGxhenkgdG8gcnVuIHdpdGggVk0gYXJncywgdXNlIFJlZmxlY3Rpb24gKi8KCSAgICBGaWVsZCBmID0gVW5zYWZlLmNsYXNzLmdldERlY2xhcmVkRmllbGQoInRoZVVuc2FmZSIpOwoJICAgIGYuc2V0QWNjZXNzaWJsZSh0cnVlKTsKCSAgICAvKiBnZXQgYXJyYXkgYWRkcmVzcyAqLwoJICAgIFVuc2FmZSB1bnNhZmUgPSAoVW5zYWZlKWYuZ2V0KG51bGwpOwoJCWJ5dGUgZm91cl9ieXRlc1tdID0gezI1LCAyNSwgMjUsIDI1fTsKCSAgICBPYmplY3QgdHJhc2hbXSA9IG5ldyBPYmplY3RbXSB7IGZvdXJfYnl0ZXMgfTsKCSAgICBsb25nIGJhc2Vfb2Zmc2V0X2J5dGVzID0gdW5zYWZlLmFycmF5QmFzZU9mZnNldChPYmplY3RbXS5jbGFzcyk7CgkgICAgbG9uZyBmb3VyX2J5dGVzX2FkZHJlc3MgPSB1bnNhZmUuZ2V0TG9uZyh0cmFzaCwgYmFzZV9vZmZzZXRfYnl0ZXMpOyAvLyA8LSB0aGlzIGlzIGl0CgkgICAgbG9uZyBpbnRzX2FkZHIgPSB1bnNhZmUuYWxsb2NhdGVNZW1vcnkoMTYpOyAvLyBhbGxvY2F0ZSA0ICogNCBieXRlcywgaS5lLiA0IGludHMKCSAgICB1bnNhZmUuY29weU1lbW9yeShmb3VyX2J5dGVzX2FkZHJlc3MgKyBiYXNlX29mZnNldF9ieXRlcywgaW50c19hZGRyLCA0KTsgLy8gY29weSBhbGwgZm91ciBieXRlcwoJICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKCQkgICAgU3lzdGVtLm91dC5wcmludGxuKHVuc2FmZS5nZXRJbnQoaW50c19hZGRyICsgaSkpOyAvL3J1biB0aHJvdWdoIGVudGlyZSBhbGxvY2F0ZWQgaW50W10sCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHNvbWUgaW50ZXN0aW5lcwoJICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbih1bnNhZmUuZ2V0Qnl0ZShpbnRzX2FkZHIgKyBpKSk7IC8vcnVuIHRocm91Z2ggZW50aXJlIGFsbG9jYXRlZCBpbnRbXSwKCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgc29tZSBpbnRlc3RpbmVzCgkgICAgfQogICAgfQp9