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
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/
|