1*9a0e4156SSadaf EbrahimiThis documentation explains how to compile, install & run Capstone on MacOSX, 2*9a0e4156SSadaf EbrahimiLinux, *BSD & Solaris. We also show steps to cross-compile for Microsoft Windows. 3*9a0e4156SSadaf Ebrahimi 4*9a0e4156SSadaf EbrahimiTo natively compile for Windows using Microsoft Visual Studio, see COMPILE_MSVC.TXT. 5*9a0e4156SSadaf Ebrahimi 6*9a0e4156SSadaf EbrahimiTo compile using CMake, see COMPILE_CMAKE.TXT. 7*9a0e4156SSadaf Ebrahimi 8*9a0e4156SSadaf EbrahimiTo compile using XCode on MacOSX, see xcode/README.md. 9*9a0e4156SSadaf Ebrahimi 10*9a0e4156SSadaf EbrahimiTo compile for Windows CE (a.k.a, Windows Embedded Compact), see windowsce/COMPILE.md. 11*9a0e4156SSadaf Ebrahimi 12*9a0e4156SSadaf Ebrahimi *-*-*-*-*-* 13*9a0e4156SSadaf Ebrahimi 14*9a0e4156SSadaf EbrahimiCapstone requires no prerequisite packages, so it is easy to compile & install. 15*9a0e4156SSadaf Ebrahimi 16*9a0e4156SSadaf Ebrahimi 17*9a0e4156SSadaf Ebrahimi 18*9a0e4156SSadaf Ebrahimi(0) Tailor Capstone to your need. 19*9a0e4156SSadaf Ebrahimi 20*9a0e4156SSadaf Ebrahimi Out of all archtitectures supported by Capstone, if you just need several 21*9a0e4156SSadaf Ebrahimi selected archs, choose the ones you want to compile in by editing "config.mk" 22*9a0e4156SSadaf Ebrahimi before going to next steps. 23*9a0e4156SSadaf Ebrahimi 24*9a0e4156SSadaf Ebrahimi By default, all architectures are compiled. 25*9a0e4156SSadaf Ebrahimi 26*9a0e4156SSadaf Ebrahimi The other way of customize Capstone without having to edit config.mk is to 27*9a0e4156SSadaf Ebrahimi pass the desired options on the commandline to ./make.sh. Currently, 28*9a0e4156SSadaf Ebrahimi Capstone supports 7 options, as followings. 29*9a0e4156SSadaf Ebrahimi 30*9a0e4156SSadaf Ebrahimi - CAPSTONE_ARCHS: specify list of architectures to compiled in. 31*9a0e4156SSadaf Ebrahimi - CAPSTONE_USE_SYS_DYN_MEM: change this if you have your own dynamic memory management. 32*9a0e4156SSadaf Ebrahimi - CAPSTONE_DIET: use this to make the output binaries more compact. 33*9a0e4156SSadaf Ebrahimi - CAPSTONE_X86_REDUCE: another option to make X86 binary smaller. 34*9a0e4156SSadaf Ebrahimi - CAPSTONE_X86_ATT_DISABLE: disables AT&T syntax on x86. 35*9a0e4156SSadaf Ebrahimi - CAPSTONE_STATIC: build static library. 36*9a0e4156SSadaf Ebrahimi - CAPSTONE_SHARED: build dynamic (shared) library. 37*9a0e4156SSadaf Ebrahimi 38*9a0e4156SSadaf Ebrahimi By default, Capstone uses system dynamic memory management, both DIET and X86_REDUCE 39*9a0e4156SSadaf Ebrahimi modes are disable, and builds all the static & shared libraries. 40*9a0e4156SSadaf Ebrahimi 41*9a0e4156SSadaf Ebrahimi To avoid editing config.mk for these customization, we can pass their values to 42*9a0e4156SSadaf Ebrahimi make.sh, as followings. 43*9a0e4156SSadaf Ebrahimi 44*9a0e4156SSadaf Ebrahimi $ CAPSTONE_ARCHS="arm aarch64 x86" CAPSTONE_USE_SYS_DYN_MEM=no CAPSTONE_DIET=yes CAPSTONE_X86_REDUCE=yes ./make.sh 45*9a0e4156SSadaf Ebrahimi 46*9a0e4156SSadaf Ebrahimi NOTE: on commandline, put these values in front of ./make.sh, not after it. 47*9a0e4156SSadaf Ebrahimi 48*9a0e4156SSadaf Ebrahimi For each option, refer to docs/README for more details. 49*9a0e4156SSadaf Ebrahimi 50*9a0e4156SSadaf Ebrahimi 51*9a0e4156SSadaf Ebrahimi 52*9a0e4156SSadaf Ebrahimi(1) Compile from source 53*9a0e4156SSadaf Ebrahimi 54*9a0e4156SSadaf Ebrahimi On *nix (such as MacOSX, Linux, *BSD, Solaris): 55*9a0e4156SSadaf Ebrahimi 56*9a0e4156SSadaf Ebrahimi - To compile for current platform, run: 57*9a0e4156SSadaf Ebrahimi 58*9a0e4156SSadaf Ebrahimi $ ./make.sh 59*9a0e4156SSadaf Ebrahimi 60*9a0e4156SSadaf Ebrahimi - On 64-bit OS, run the command below to cross-compile Capstone for 32-bit binary: 61*9a0e4156SSadaf Ebrahimi 62*9a0e4156SSadaf Ebrahimi $ ./make.sh nix32 63*9a0e4156SSadaf Ebrahimi 64*9a0e4156SSadaf Ebrahimi 65*9a0e4156SSadaf Ebrahimi 66*9a0e4156SSadaf Ebrahimi(2) Install Capstone on *nix 67*9a0e4156SSadaf Ebrahimi 68*9a0e4156SSadaf Ebrahimi To install Capstone, run: 69*9a0e4156SSadaf Ebrahimi 70*9a0e4156SSadaf Ebrahimi $ sudo ./make.sh install 71*9a0e4156SSadaf Ebrahimi 72*9a0e4156SSadaf Ebrahimi For FreeBSD/OpenBSD, where sudo is unavailable, run: 73*9a0e4156SSadaf Ebrahimi 74*9a0e4156SSadaf Ebrahimi $ su; ./make.sh install 75*9a0e4156SSadaf Ebrahimi 76*9a0e4156SSadaf Ebrahimi Users are then required to enter root password to copy Capstone into machine 77*9a0e4156SSadaf Ebrahimi system directories. 78*9a0e4156SSadaf Ebrahimi 79*9a0e4156SSadaf Ebrahimi Afterwards, run ./tests/test* to see the tests disassembling sample code. 80*9a0e4156SSadaf Ebrahimi 81*9a0e4156SSadaf Ebrahimi 82*9a0e4156SSadaf Ebrahimi NOTE: The core framework installed by "./make.sh install" consist of 83*9a0e4156SSadaf Ebrahimi following files: 84*9a0e4156SSadaf Ebrahimi 85*9a0e4156SSadaf Ebrahimi /usr/include/capstone/arm.h 86*9a0e4156SSadaf Ebrahimi /usr/include/capstone/arm64.h 87*9a0e4156SSadaf Ebrahimi /usr/include/capstone/capstone.h 88*9a0e4156SSadaf Ebrahimi /usr/include/capstone/evm.h 89*9a0e4156SSadaf Ebrahimi /usr/include/capstone/m680x.h 90*9a0e4156SSadaf Ebrahimi /usr/include/capstone/m68k.h 91*9a0e4156SSadaf Ebrahimi /usr/include/capstone/mips.h 92*9a0e4156SSadaf Ebrahimi /usr/include/capstone/mos65xx.h 93*9a0e4156SSadaf Ebrahimi /usr/include/capstone/platform.h 94*9a0e4156SSadaf Ebrahimi /usr/include/capstone/ppc.h 95*9a0e4156SSadaf Ebrahimi /usr/include/capstone/sparc.h 96*9a0e4156SSadaf Ebrahimi /usr/include/capstone/systemz.h 97*9a0e4156SSadaf Ebrahimi /usr/include/capstone/tms320c64x.h 98*9a0e4156SSadaf Ebrahimi /usr/include/capstone/x86.h 99*9a0e4156SSadaf Ebrahimi /usr/include/capstone/xcore.h 100*9a0e4156SSadaf Ebrahimi /usr/lib/libcapstone.a 101*9a0e4156SSadaf Ebrahimi /usr/lib/libcapstone.so (for Linux/*nix), or /usr/lib/libcapstone.dylib (OSX) 102*9a0e4156SSadaf Ebrahimi 103*9a0e4156SSadaf Ebrahimi 104*9a0e4156SSadaf Ebrahimi 105*9a0e4156SSadaf Ebrahimi(3) Cross-compile for Windows from *nix 106*9a0e4156SSadaf Ebrahimi 107*9a0e4156SSadaf Ebrahimi To cross-compile for Windows, Linux & gcc-mingw-w64-i686 (and also gcc-mingw-w64-x86-64 108*9a0e4156SSadaf Ebrahimi for 64-bit binaries) are required. 109*9a0e4156SSadaf Ebrahimi 110*9a0e4156SSadaf Ebrahimi - To cross-compile Windows 32-bit binary, simply run: 111*9a0e4156SSadaf Ebrahimi 112*9a0e4156SSadaf Ebrahimi $ ./make.sh cross-win32 113*9a0e4156SSadaf Ebrahimi 114*9a0e4156SSadaf Ebrahimi - To cross-compile Windows 64-bit binary, run: 115*9a0e4156SSadaf Ebrahimi 116*9a0e4156SSadaf Ebrahimi $ ./make.sh cross-win64 117*9a0e4156SSadaf Ebrahimi 118*9a0e4156SSadaf Ebrahimi Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then 119*9a0e4156SSadaf Ebrahimi be used on Windows machine. 120*9a0e4156SSadaf Ebrahimi 121*9a0e4156SSadaf Ebrahimi 122*9a0e4156SSadaf Ebrahimi 123*9a0e4156SSadaf Ebrahimi(4) Cross-compile for iOS from Mac OSX. 124*9a0e4156SSadaf Ebrahimi 125*9a0e4156SSadaf Ebrahimi To cross-compile for iOS (iPhone/iPad/iPod), Mac OSX with XCode installed is required. 126*9a0e4156SSadaf Ebrahimi 127*9a0e4156SSadaf Ebrahimi - To cross-compile for ArmV7 (iPod 4, iPad 1/2/3, iPhone4, iPhone4S), run: 128*9a0e4156SSadaf Ebrahimi $ ./make.sh ios_armv7 129*9a0e4156SSadaf Ebrahimi 130*9a0e4156SSadaf Ebrahimi - To cross-compile for ArmV7s (iPad 4, iPhone 5C, iPad mini), run: 131*9a0e4156SSadaf Ebrahimi $ ./make.sh ios_armv7s 132*9a0e4156SSadaf Ebrahimi 133*9a0e4156SSadaf Ebrahimi - To cross-compile for Arm64 (iPhone 5S, iPad mini Retina, iPad Air), run: 134*9a0e4156SSadaf Ebrahimi $ ./make.sh ios_arm64 135*9a0e4156SSadaf Ebrahimi 136*9a0e4156SSadaf Ebrahimi - To cross-compile for all iDevices (armv7 + armv7s + arm64), run: 137*9a0e4156SSadaf Ebrahimi $ ./make.sh ios 138*9a0e4156SSadaf Ebrahimi 139*9a0e4156SSadaf Ebrahimi Resulted files libcapstone.dylib, libcapstone.a & tests/test* can then 140*9a0e4156SSadaf Ebrahimi be used on iOS devices. 141*9a0e4156SSadaf Ebrahimi 142*9a0e4156SSadaf Ebrahimi 143*9a0e4156SSadaf Ebrahimi 144*9a0e4156SSadaf Ebrahimi(5) Cross-compile for Android 145*9a0e4156SSadaf Ebrahimi 146*9a0e4156SSadaf Ebrahimi To cross-compile for Android (smartphone/tablet), Android NDK is required. 147*9a0e4156SSadaf Ebrahimi NOTE: Only ARM and ARM64 are currently supported. 148*9a0e4156SSadaf Ebrahimi 149*9a0e4156SSadaf Ebrahimi $ NDK=/android/android-ndk-r10e ./make.sh cross-android arm 150*9a0e4156SSadaf Ebrahimi or 151*9a0e4156SSadaf Ebrahimi $ NDK=/android/android-ndk-r10e ./make.sh cross-android arm64 152*9a0e4156SSadaf Ebrahimi 153*9a0e4156SSadaf Ebrahimi Resulted files libcapstone.so, libcapstone.a & tests/test* can then 154*9a0e4156SSadaf Ebrahimi be used on Android devices. 155*9a0e4156SSadaf Ebrahimi 156*9a0e4156SSadaf Ebrahimi 157*9a0e4156SSadaf Ebrahimi 158*9a0e4156SSadaf Ebrahimi(6) Compile on Windows with Cygwin 159*9a0e4156SSadaf Ebrahimi 160*9a0e4156SSadaf Ebrahimi To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run: 161*9a0e4156SSadaf Ebrahimi 162*9a0e4156SSadaf Ebrahimi - To compile Windows 32-bit binary under Cygwin, run: 163*9a0e4156SSadaf Ebrahimi 164*9a0e4156SSadaf Ebrahimi $ ./make.sh cygwin-mingw32 165*9a0e4156SSadaf Ebrahimi 166*9a0e4156SSadaf Ebrahimi - To compile Windows 64-bit binary under Cygwin, run: 167*9a0e4156SSadaf Ebrahimi 168*9a0e4156SSadaf Ebrahimi $ ./make.sh cygwin-mingw64 169*9a0e4156SSadaf Ebrahimi 170*9a0e4156SSadaf Ebrahimi Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then 171*9a0e4156SSadaf Ebrahimi be used on Windows machine. 172*9a0e4156SSadaf Ebrahimi 173*9a0e4156SSadaf Ebrahimi 174*9a0e4156SSadaf Ebrahimi 175*9a0e4156SSadaf Ebrahimi(7) By default, "cc" (default C compiler on the system) is used as compiler. 176*9a0e4156SSadaf Ebrahimi 177*9a0e4156SSadaf Ebrahimi - To use "clang" compiler instead, run the command below: 178*9a0e4156SSadaf Ebrahimi 179*9a0e4156SSadaf Ebrahimi $ ./make.sh clang 180*9a0e4156SSadaf Ebrahimi 181*9a0e4156SSadaf Ebrahimi - To use "gcc" compiler instead, run: 182*9a0e4156SSadaf Ebrahimi 183*9a0e4156SSadaf Ebrahimi $ ./make.sh gcc 184*9a0e4156SSadaf Ebrahimi 185*9a0e4156SSadaf Ebrahimi 186*9a0e4156SSadaf Ebrahimi 187*9a0e4156SSadaf Ebrahimi(8) To uninstall Capstone, run the command below: 188*9a0e4156SSadaf Ebrahimi 189*9a0e4156SSadaf Ebrahimi $ sudo ./make.sh uninstall 190*9a0e4156SSadaf Ebrahimi 191*9a0e4156SSadaf Ebrahimi 192*9a0e4156SSadaf Ebrahimi 193*9a0e4156SSadaf Ebrahimi(9) Language bindings 194*9a0e4156SSadaf Ebrahimi 195*9a0e4156SSadaf Ebrahimi So far, Python, Ocaml & Java are supported by bindings in the main code. 196*9a0e4156SSadaf Ebrahimi Look for the bindings under directory bindings/, and refer to README file 197*9a0e4156SSadaf Ebrahimi of corresponding languages. 198*9a0e4156SSadaf Ebrahimi 199*9a0e4156SSadaf Ebrahimi Community also provide bindings for C#, Go, Ruby, NodeJS, C++ & Vala. Links to 200*9a0e4156SSadaf Ebrahimi these can be found at address http://capstone-engine.org/download.html 201