Files
unicorn/bindings/java/README.md
Robert Xiao dfdc8e7e8e Switch to Maven to build the Java bits.
Maven is now used to update the constants, build the Java code, call make to
build the native library, and run all the tests. I have removed the "install"
and "uninstall" targets; instead, the expectation will be that the JNI library
will be placed somewhere on java.library.path and the JAR file will be used as
usual (e.g. in a downstream Maven project, or placed on the classpath of your
project).

Since Maven is now running our tests, this eliminates the need to bundle test
dependencies in `testdep`, and makes the project structured more like a typical
Java project.
2023-06-29 16:08:18 -07:00

40 lines
1.6 KiB
Markdown

This documentation explains how to install the Java binding for Unicorn
from source.
0. Follow `docs/COMPILE.md` in the root directory to compile the core to the `build` directory.
Note: by default, the Java binding native library will be built by statically linking to
`../../build/libunicorn.a`, thereby removing `libunicorn` as a runtime dependency, but
making the produced native library `libunicorn_java` bigger.
If you instead want to dynamically link against the installed `libunicorn`, change
`LIBS=../../build/libunicorn.a` to `LIBS=-lunicorn` in `Makefile`.
1. Install a JDK for your platform.
2. Install Maven: https://maven.apache.org/install.html.
3. Change directories into the java bindings and build the Maven package:
$ mvn package
This will automatically build and test the Unicorn Java bindings.
The bindings consist of the native JNI library (`libunicorn_java.{so,dylib,dll}`)
and the Java JAR (`target/unicorn-2.xx.jar`). You will need to have the native
library on `java.library.path` and the JAR on your classpath.
The `src/main/test/java` directory contains some sample code to show how to use Unicorn API.
`samples` is a set of sample classes showcasing the various features of the Unicorn API,
while `tests` is a set of JUnit tests for the API.
- `Sample_<arch>.java`:
These show how to access architecture-specific information for each
architecture.
- `Shellcode.java`:
This shows how to analyze a Linux shellcode.
- `SampleNetworkAuditing.java`:
Unicorn sample for auditing network connection and file handling in shellcode.