Commit b7242d35 authored by Sophie Brun's avatar Sophie Brun

Merge tag 'upstream/3.0'

Upstream version 3.0
parents a612327d efb8b325
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
*.o *.o
*.ko *.ko
# Gcc dependency-tracking files
*.d
# Libraries # Libraries
*.lib *.lib
*.a *.a
...@@ -20,35 +23,45 @@ ...@@ -20,35 +23,45 @@
# python # python
bindings/python/build/ bindings/python/build/
*.pyc *.pyc
bindings/python/pyx/*.c
bindings/python/pyx/arm.pyx
bindings/python/pyx/arm64.pyx
bindings/python/pyx/arm64_const.pyx
bindings/python/pyx/arm_const.pyx
bindings/python/pyx/capstone.pyx
bindings/python/pyx/mips.pyx
bindings/python/pyx/mips_const.pyx
bindings/python/pyx/ppc.pyx
bindings/python/pyx/ppc_const.pyx
bindings/python/pyx/x86.pyx
bindings/python/pyx/x86_const.pyx
# java # java
bindings/java/capstone.jar bindings/java/capstone.jar
# ocaml
bindings/ocaml/*.cmi
bindings/ocaml/*.cmx
bindings/ocaml/*.cmxa
bindings/ocaml/*.mli
bindings/ocaml/test
bindings/ocaml/test_arm
bindings/ocaml/test_arm64
bindings/ocaml/test_mips
bindings/ocaml/test_x86
bindings/ocaml/test_detail
bindings/ocaml/test_ppc
bindings/ocaml/test_sparc
bindings/ocaml/test_systemz
bindings/ocaml/test_xcore
# test binaries # test binaries
tests/test tests/test
tests/test_detail tests/test_detail
tests/test_iter
tests/test_arm tests/test_arm
tests/test_arm64 tests/test_arm64
tests/test_mips tests/test_mips
tests/test_x86 tests/test_x86
tests/test_ppc tests/test_ppc
tests/test_skipdata
tests/test_sparc
tests/test_systemz
tests/test_xcore
tests/*.static tests/*.static
# vim tmp file # vim tmp file
*.swp *.swp
*~
capstone.pc capstone.pc
...@@ -57,3 +70,21 @@ _* ...@@ -57,3 +70,21 @@ _*
# freebsd ports: generated file with "make makesum" command # freebsd ports: generated file with "make makesum" command
packages/freebsd/ports/devel/capstone/distinfo packages/freebsd/ports/devel/capstone/distinfo
# VisualStudio
Debug/
Release/
ipch/
*.sdf
*.opensdf
*.suo
*.user
# Xcode
xcode/Capstone.xcodeproj/xcuserdata
# suite/
test_arm_regression
test_arm_regression.o
*.s
cmake_minimum_required(VERSION 2.6)
project(capstone)
set(VERSION_MAJOR 2)
set(VERSION_MINOR 2)
set(VERSION_PATCH 0)
# to configure the options specify them in in the command line or change them in the cmake UI.
# Don't edit the makefile!
option(CAPSTONE_BUILD_STATIC "Build static library" ON)
option(CAPSTONE_BUILD_SHARED "Build shared library" ON)
option(CAPSTONE_BUILD_DIET "Build diet library" OFF)
option(CAPSTONE_BUILD_TESTS "Build tests" ON)
option(CAPSTONE_USE_DEFAULT_ALLOC "Use default memory allocation functions" ON)
option(CAPSTONE_ARM_SUPPORT "ARM support" ON)
option(CAPSTONE_ARM64_SUPPORT "ARM64 support" ON)
option(CAPSTONE_MIPS_SUPPORT "MIPS support" ON)
option(CAPSTONE_PPC_SUPPORT "PowerPC support" ON)
option(CAPSTONE_SPARC_SUPPORT "Sparc support" ON)
option(CAPSTONE_SYSZ_SUPPORT "SystemZ support" ON)
option(CAPSTONE_XCORE_SUPPORT "XCore support" ON)
option(CAPSTONE_X86_SUPPORT "x86 support" ON)
option(CAPSTONE_X86_REDUCE "x86 with reduce instruction sets to minimize library" OFF)
option(CAPSTONE_X86_ATT_DISABLE "Disable x86 AT&T syntax" OFF)
if (CAPSTONE_BUILD_DIET)
add_definitions(-DCAPSTONE_DIET)
endif ()
if (CAPSTONE_USE_DEFAULT_ALLOC)
add_definitions(-DCAPSTONE_USE_SYS_DYN_MEM)
endif ()
if (CAPSTONE_X86_REDUCE)
add_definitions(-DCAPSTONE_X86_REDUCE)
endif ()
if (CAPSTONE_X86_ATT_DISABLE)
add_definitions(-DCAPSTONE_X86_ATT_DISABLE)
endif ()
## sources
set(SOURCES
cs.c
MCInst.c
MCInstrDesc.c
MCRegisterInfo.c
SStream.c
utils.c
)
set(TEST_SOURCES test.c test_detail.c test_skipdata.c test_iter.c)
## architecture support
if (CAPSTONE_ARM_SUPPORT)
add_definitions(-DCAPSTONE_HAS_ARM)
set(SOURCES
${SOURCES}
arch/ARM/ARMDisassembler.c
arch/ARM/ARMInstPrinter.c
arch/ARM/ARMMapping.c
arch/ARM/ARMModule.c
)
set(TEST_SOURCES ${TEST_SOURCES} test_arm.c)
endif ()
if (CAPSTONE_ARM64_SUPPORT)
add_definitions(-DCAPSTONE_HAS_ARM64)
set(SOURCES
${SOURCES}
arch/AArch64/AArch64BaseInfo.c
arch/AArch64/AArch64Disassembler.c
arch/AArch64/AArch64InstPrinter.c
arch/AArch64/AArch64Mapping.c
arch/AArch64/AArch64Module.c
)
set(TEST_SOURCES ${TEST_SOURCES} test_arm64.c)
endif ()
if (CAPSTONE_MIPS_SUPPORT)
add_definitions(-DCAPSTONE_HAS_MIPS)
set(SOURCES
${SOURCES}
arch/Mips/MipsDisassembler.c
arch/Mips/MipsInstPrinter.c
arch/Mips/MipsMapping.c
arch/Mips/MipsModule.c
)
set(TEST_SOURCES ${TEST_SOURCES} test_mips.c)
endif ()
if (CAPSTONE_PPC_SUPPORT)
add_definitions(-DCAPSTONE_HAS_POWERPC)
set(SOURCES
${SOURCES}
arch/PowerPC/PPCDisassembler.c
arch/PowerPC/PPCInstPrinter.c
arch/PowerPC/PPCMapping.c
arch/PowerPC/PPCModule.c
)
set(TEST_SOURCES ${TEST_SOURCES} test_ppc.c)
endif ()
if (CAPSTONE_X86_SUPPORT)
add_definitions(-DCAPSTONE_HAS_X86)
set(SOURCES
${SOURCES}
arch/X86/X86Disassembler.c
arch/X86/X86DisassemblerDecoder.c
arch/X86/X86IntelInstPrinter.c
arch/X86/X86Mapping.c
arch/X86/X86Module.c
)
if (NOT CAPSTONE_BUILD_DIET)
set(SOURCES ${SOURCES} arch/X86/X86ATTInstPrinter.c)
endif ()
set(TEST_SOURCES ${TEST_SOURCES} test_x86.c)
endif ()
if (CAPSTONE_SPARC_SUPPORT)
add_definitions(-DCAPSTONE_HAS_SPARC)
set(SOURCES
${SOURCES}
arch/Sparc/SparcDisassembler.c
arch/Sparc/SparcInstPrinter.c
arch/Sparc/SparcMapping.c
arch/Sparc/SparcModule.c
)
set(TEST_SOURCES ${TEST_SOURCES} test_sparc.c)
endif ()
if (CAPSTONE_SYSZ_SUPPORT)
add_definitions(-DCAPSTONE_HAS_SYSZ)
set(SOURCES
${SOURCES}
arch/SystemZ/SystemZDisassembler.c
arch/SystemZ/SystemZInstPrinter.c
arch/SystemZ/SystemZMapping.c
arch/SystemZ/SystemZModule.c
arch/SystemZ/SystemZMCTargetDesc.c
)
set(TEST_SOURCES ${TEST_SOURCES} test_systemz.c)
endif ()
if (CAPSTONE_XCORE_SUPPORT)
add_definitions(-DCAPSTONE_HAS_XCORE)
set(SOURCES
${SOURCES}
arch/XCore/XCoreDisassembler.c
arch/XCore/XCoreInstPrinter.c
arch/XCore/XCoreMapping.c
arch/XCore/XCoreModule.c
)
set(TEST_SOURCES ${TEST_SOURCES} test_xcore.c)
endif ()
include_directories("${PROJECT_SOURCE_DIR}/include")
## properties
# version info
set_property(GLOBAL PROPERTY VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
set_property(GLOBAL PROPERTY SOVERSION SOVERSION ${VERSION_MAJOR})
## targets
if (CAPSTONE_BUILD_STATIC)
add_library(capstone-static STATIC ${SOURCES})
set_property(TARGET capstone-static PROPERTY OUTPUT_NAME capstone)
set(default-target capstone-static)
endif ()
if (CAPSTONE_BUILD_SHARED)
add_library(capstone-shared SHARED ${SOURCES})
set_property(TARGET capstone-shared PROPERTY OUTPUT_NAME capstone)
set_property(TARGET capstone-shared PROPERTY COMPILE_FLAGS -DCAPSTONE_SHARED)
if(NOT DEFINED default-target) # honor `capstone-static` for tests first.
set(default-target capstone-shared)
add_definitions(-DCAPSTONE_SHARED)
endif ()
endif ()
if (CAPSTONE_BUILD_TESTS)
foreach (TSRC ${TEST_SOURCES})
STRING(REGEX REPLACE ".c$" "" TBIN ${TSRC})
add_executable(${TBIN} "tests/${TSRC}")
target_link_libraries(${TBIN} ${default-target})
endforeach ()
if (CAPSTONE_ARM_SUPPORT)
set(ARM_REGRESS_TEST test_arm_regression.c)
STRING(REGEX REPLACE ".c$" "" ARM_REGRESS_BIN ${ARM_REGRESS_TEST})
add_executable(${ARM_REGRESS_BIN} "suite/arm/${ARM_REGRESS_TEST}")
target_link_libraries(${ARM_REGRESS_BIN} ${default-target})
endif()
endif ()
## installation
set(INCLUDES arm64.h arm.h capstone.h mips.h ppc.h x86.h sparc.h systemz.h xcore.h platform.h)
foreach (INC ${INCLUDES})
install(FILES "include/${INC}" DESTINATION include/capstone)
endforeach ()
if (CAPSTONE_BUILD_STATIC)
install(TARGETS capstone-static
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif ()
if (CAPSTONE_BUILD_SHARED)
install(TARGETS capstone-shared
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif ()
How To Compile, install & run Capstone for Linux, Mac OSX, *BSD and Windows This documentation explains how to compile, install & run Capstone on MacOSX,
Linux, *BSD & Solaris. We also show steps to cross-compile for Microsoft Windows.
To natively compile for Windows using Microsoft Visual Studio, see COMPILE_MSVC.TXT.
To compile using CMake, see COMPILE_CMAKE.TXT.
To compile using XCode on MacOSX, see xcode/README.md.
*-*-*-*-*-* *-*-*-*-*-*
Capstone requires no prerequisite packages, so it is easy to compile & install. Capstone requires no prerequisite packages, so it is easy to compile & install.
...@@ -7,11 +15,35 @@ Capstone requires no prerequisite packages, so it is easy to compile & install. ...@@ -7,11 +15,35 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
(0) Tailor Capstone to your need. (0) Tailor Capstone to your need.
Out of 5 archtitectures supported by Capstone (Arm, Arm64, Mips, PPC & X86), Out of 8 archtitectures supported by Capstone (Arm, Arm64, Mips, PPC, Sparc,
if you just need several selected archs, you can choose which ones you want SystemZ, XCore & X86), if you just need several selected archs, choose which
to compile in by modifying config.mk before going to next steps. ones you want to compile in by editing "config.mk" before going to next steps.
By default, all 8 architectures are compiled.
The other way of customize Capstone without having to edit config.mk is to
pass the desired options on the commandline to ./make.sh. Currently,
Capstone supports 5 options, as followings.
- CAPSTONE_ARCHS: specify list of architectures to compiled in.
- CAPSTONE_USE_SYS_DYN_MEM: change this if you have your own dynamic memory management.
- CAPSTONE_DIET: use this to make the output binaries more compact.
- CAPSTONE_X86_REDUCE: another option to make X86 binary smaller.
- CAPSTONE_X86_ATT_DISABLE: disables AT&T syntax on x86.
- CAPSTONE_STATIC: build static library.
- CAPSTONE_SHARED: build dynamic (shared) library.
By default, all 5 architectures are compiled. By default, Capstone uses system dynamic memory management, both DIET and X86_REDUCE
modes are disable, and builds all the static & shared libraries.
To avoid editing config.mk for these customization, we can pass their values to
make.sh, as followings.
$ CAPSTONE_ARCHS="arm aarch64 x86" CAPSTONE_USE_SYS_DYN_MEM=no CAPSTONE_DIET=yes CAPSTONE_X86_REDUCE=yes ./make.sh
NOTE: on commandline, put these values in front of ./make.sh, not after it.
For each option, refer to docs/README for more details.
...@@ -23,9 +55,9 @@ Capstone requires no prerequisite packages, so it is easy to compile & install. ...@@ -23,9 +55,9 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
$ ./make.sh $ ./make.sh
- On 64-bit OS, run command below to cross-compile Capstone for 32-bit binary: - On 64-bit OS, run the command below to cross-compile Capstone for 32-bit binary:
$ ./make.sh nix32 $ ./make.sh nix32
...@@ -34,10 +66,10 @@ Capstone requires no prerequisite packages, so it is easy to compile & install. ...@@ -34,10 +66,10 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
To install Capstone, run: To install Capstone, run:
$ sudo ./make.sh install $ sudo ./make.sh install
For FreeBSD/OpenBSD, where sudo is unavailable, run: For FreeBSD/OpenBSD, where sudo is unavailable, run:
$ su; ./make.sh install $ su; ./make.sh install
Users are then required to enter root password to copy Capstone into machine Users are then required to enter root password to copy Capstone into machine
system directories. system directories.
...@@ -54,20 +86,24 @@ Capstone requires no prerequisite packages, so it is easy to compile & install. ...@@ -54,20 +86,24 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
/usr/include/capstone/arm64.h /usr/include/capstone/arm64.h
/usr/include/capstone/mips.h /usr/include/capstone/mips.h
/usr/include/capstone/ppc.h /usr/include/capstone/ppc.h
/usr/include/capstone/sparc.h
/usr/include/capstone/systemz.h
/usr/lib/libcapstone.so (for Linux/*nix), or /usr/lib/libcapstone.dylib (OSX) /usr/lib/libcapstone.so (for Linux/*nix), or /usr/lib/libcapstone.dylib (OSX)
/usr/lib/libcapstone.a /usr/lib/libcapstone.a
(3) Cross-compile Windows from *nix (3) Cross-compile for Windows from *nix
To cross-compile for Windows, Linux & gcc-mingw-w64-i686 (and also gcc-mingw-w64-x86-64 To cross-compile for Windows, Linux & gcc-mingw-w64-i686 (and also gcc-mingw-w64-x86-64
for 64-bit binaries) are required. for 64-bit binaries) are required.
- To cross-compile Windows 32-bit binary, simply run: - To cross-compile Windows 32-bit binary, simply run:
$ ./make.sh cross-win32 $ ./make.sh cross-win32
- To cross-compile Windows 64-bit binary, run: - To cross-compile Windows 64-bit binary, run:
$ ./make.sh cross-win64 $ ./make.sh cross-win64
Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then
...@@ -75,7 +111,7 @@ Capstone requires no prerequisite packages, so it is easy to compile & install. ...@@ -75,7 +111,7 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
(4) Cross-compile iOS from Mac OSX. (4) Cross-compile for iOS from Mac OSX.
To cross-compile for iOS (iPhone/iPad/iPod), Mac OSX with XCode installed is required. To cross-compile for iOS (iPhone/iPad/iPod), Mac OSX with XCode installed is required.
...@@ -96,23 +132,37 @@ Capstone requires no prerequisite packages, so it is easy to compile & install. ...@@ -96,23 +132,37 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
(5) Compile on Windows with Cygwin (5) Cross-compile for Android
To cross-compile for Android (smartphone/tablet), Android NDK is required.
$ ./make.sh cross-android
Resulted files libcapstone.so, libcapstone.a & tests/test* can then
be used on Android devices.
(6) Compile on Windows with Cygwin
To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run: To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run:
- To compile Windows 32-bit binary under Cygwin, simply run - To compile Windows 32-bit binary under Cygwin, run:
$ ./make.sh cygwin-mingw32 $ ./make.sh cygwin-mingw32
- To compile Windows 64-bit binary under Cygwin, run - To compile Windows 64-bit binary under Cygwin, run: