-
Notifications
You must be signed in to change notification settings - Fork 193
Working on Java
brkzlr edited this page Jun 25, 2026
·
5 revisions
There are a few things you should know before working on Java games:
-
Don't attach to the launcher, attach to Java itself: The launcher usually just starts the real game process and exits or sits in the background. Look for a
javaprocess that appears after starting the game. That's usually the one you want. -
Don't assume Java values are big endian in process memory: Java class files and some Java APIs use big endian, but normal heap values in a running JVM on x86/x64 are usually stored in the machine's native byte order, so
HostorLittleis normally correct.- Use
Bigonly if you know the data itself is big endian. For example a custom buffer, network data, save data, emulator memory or something the game manually stores in that format. - If your scan results make no sense, try the other endianness once. But don't start with
Bigjust because the target is Java.
- Use
-
SIGSEGVshould usually be ignored for Java processes: Java usesSIGSEGVinternally for memory management and runtime tricks. If GDB stops on everySIGSEGV, Java targets become almost unusable.- By default,
Settings -> Java -> Ignore SIGSEGV for Java processesshould be enabled. - PINCE's Java detection is simple: it checks whether the attached process name starts with
java. - If the option does not work because the process has a different name, set
SIGSEGVto only Pass to Program manually in Signal Behaviour. - You can also read more about Java and
SIGSEGVhere.
- By default,
-
Raw addresses can be less stable than in native games: The JVM can move objects around during garbage collection. If you find a value and it later disappears or points to nonsense, it might have moved.
- Static fields, long-lived objects and values owned by native libraries tend to be more stable.
- Pointer paths may break more often than they do in simple native games, especially for ordinary heap objects.
- Java is not Mono/IL2CPP: The Mono/IL2CPP Dissector is for .NET/Unity runtimes. It won't understand a normal Java JVM.