You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.4 KiB

3 years ago
This documentation explains how to build & install Keystone on all kind of nix OS.
For Windows, see [COMPILE-WINDOWS.md](COMPILE-WINDOWS.md)
1. Dependency
CMake is required to build keystone.
- On Mac OS X, you can install "cmake" with "brew".
$ brew install cmake
- On Ubuntu Linux, install "cmake" with:
$ sudo apt-get install cmake
2. From the root directory of Keystone source, compile its dynamic library
with the following commands.
$ mkdir build
$ cd build
$ ../make-share.sh
In the case you want to compile with all the debug information, replace the
last line with:
$ ../make-share.sh debug
For Linux distributions following the "Filesystem Hierarchy Standard" and
put x64 libraries under $PREFIX/lib64, such as Fedora, Redhat & Suse,
add "lib64" option at the end of make-share.sh script, like below.
$ ../make-share.sh lib64
By default, this builds all architectures, which is: AArch64, ARM, Hexagon,
Mips, PowerPC, Sparc, SystemZ & X86. To compile just some selected ones,
pass a semicolon-separated list of targets to LLVM_TARGETS_TO_BUILD,
like follows if we only want AArch64 & X86.
$ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DLLVM_TARGETS_TO_BUILD="AArch64;X86" -G "Unix Makefiles" ..
$ make -j8
You can also compile static a library with:
$ mkdir build
$ cd build
$ ../make-lib.sh
In the case you want to compile with all the debug information, replace the
last line with:
$ ../make-lib.sh debug
For Linux distributions following the "Filesystem Hierarchy Standard" and
put x64 libraries under $PREFIX/lib64, such as Fedora, Redhat & Suse,
add "lib64" option at the end of make-share.sh script, like below.
$ ../make-lib.sh lib64
Like above, this builds all architectures. To compile just some selected ones,
pass a semicolon-separated list of targets to LLVM_TARGETS_TO_BUILD,
like follows if we only want AArch64 & X86.
$ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DLLVM_TARGETS_TO_BUILD="AArch64, X86" -G "Unix Makefiles" ..
$ make -j8
To customize your build by specifying PREFIX or other installation directories,
pass one of the variables at https://cmake.org/cmake/help/v3.0/module/GNUInstallDirs.html
to cmake. For example:
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DLLVM_TARGETS_TO_BUILD="AArch64, X86" -G "Unix Makefiles" ..
$ make -j8
3. Right after building, install Keystone.
$ sudo make install
Keystone is installed in `/usr/local`, depending on your distribution (eg. Ubuntu) you might
need to add `/usr/local/lib` to `/etc/ld.so.conf`. Then update the dynamic linker
with:
$ sudo ldconfig
Besides the libraries & C header files under directory "include/keystone",
this step also installs a tool named "kstool" on the system.
(The source of "kstool" is in the directory "kstool/kstool")
4. Test Keystone with "kstool" like below.
$ kstool x32 "add eax, ebx"
Run "kstool" without any option to find out how to use this handy tool.
5. Learn more on how to code your own tools with our samples.
For C sample code, see code in directory samples/
For Python sample code, see code in directory bindings/python/