-
Notifications
You must be signed in to change notification settings - Fork 5
/
README
86 lines (61 loc) · 2.42 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
= hotspot_evil
== DESCRIPTION:
This is a library that exposes the internals of Oracle (Sun)'s HotSpot VM.
It uses unverifiable bytecode sequences to do some really evil stuff, like
reinterpret_cast<>, memory address/dereference, accessing non-visible symbols,
and the like.
Most functionalities are only known to work on Oracle HotSpot VM.
== SYNOPSIS:
In Java:
import hotspot.evil.*;
import hotspot.evil.util.*;
public class Test {
public static void main(String[] args) {
Integer i = new Integer(123456);
long a = Address.of(i);
int intValue = Dereference.int32(a + Unsafes.getObjectHeaderSize());
assert intValue == i.intValue() : "should be the same value";
assert ReinterpretCast.toLong(2.0) == 0x4000000000000000L;
}
}
== REQUIREMENTS:
* Java SE 6 JDK (specifically the ones from Oracle/Sun, containing HotSpot VM)
* JRuby 1.4.0 or higher
* BiteScript 0.0.5 or higher
Make sure the "jruby" and "javac" commands are in $PATH or otherwise available
in shell.
Uses JRuby 1.5.0/BiteScript 0.0.5 to generate *.class files from *.java files.
The *.java files in src/ruby directory are actually JRuby source files. See
doc/design_notes for more details.
== DOWNLOAD SOURCES:
git clone git://github.com/rednaxelafx/hotspot_evil.git
== BUILD:
cd hotspot_evil
rake
If all goes well, the command line output should be like the following:
$ rake
(in hotspot_evil)
jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (Java HotSpot(TM)
Client VM 1.6.0_23) [x86-java]
mkdir -p D:/temp/hotspot_evil/bin
cd D:/temp/hotspot_evil/src/java
rm D:/temp/hotspot_evil/bin/compile.log
cd D:/temp/hotspot_evil/src/ruby
compiled Address.java
compiled Dereference.java
compiled MarkWord.java
compiled ReinterpretCast.java
The *.class files will be generated in the bin directory. To use this library,
add the this bin directory to the classpath of the target Java program.
== KNOWN ISSUES:
There are problems building on Windows, namely JRuby 1.4.0's launcher *.bat
files have bugs with paths, where as JRuby 1.5.3's "system" method have bugs
so that it doesn't execute the command given. A workaround is to install both
versions of JRuby, copy the "jruby.*" files from 1.5.3's bin directory to
1.4.0's, and then put 1.4.0's bin on %PATH% to make it the current JRuby on
command line.
== LICENSE:
3-clause BSD license
== AUTHOR:
Kris "RednaxelaFX" Mok
http://rednaxelafx.javaeye.com