Capstone disassembly/disassembler framework for ARM, ARM64 (ARMv8), Alpha, BPF, Ethereum VM, HPPA, LoongArch, M68K, M680X, Mips, MOS65XX, PPC, RISC-V(rv32G/rv64G), SH, Sparc, SystemZ, TMS320C64X, TriCore, Webassembly, XCore and X86.
Go to file
Michael Orlitzky d6c1e0df08 capstone.pc.in: re-add capstone include subdirectory via Cflags.
CMake installs the "common headers" for Capstone into a capstone/
subdirectory of the system's includedir:

  install(
    FILES ${HEADERS_COMMON}
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/capstone
  )

The pkg-config file, on the other hand, omits the subdirectory:

    includedir=${prefix}/include
    Cflags: -I${includedir}

This means that consumers of the library would need to include the
"capstone/" prefix when including those headers. For example,

  #include <capstone/capstone.h>

rather than

  #include <capstone.h>

Neither is "wrong" -- it's a design choice, but one that breaks the
public API when it changes. This has happened before:

  https://github.com/capstone-engine/capstone/commit/0a39b785
  https://github.com/capstone-engine/capstone/commit/02e33f8b

And (for example) PHP was updated to reflect that, i.e. to work with
capstone-4.x:

  https://github.com/php/php-src/commit/ffc2a53a

But now in the 5.x series of Capstone, the path (or the -I flag,
relative to that path) has reverted,

  https://github.com/capstone-engine/capstone/commit/6656bcb6

breaking PHP once again. This commit re-fixes it by updating the
directory passed via Cflags.

Closes: https://github.com/capstone-engine/capstone/issues/1982
2023-06-16 10:02:51 -04:00
.github/workflows update CI ubuntu version 2023-04-06 18:21:48 +08:00
arch Merge pull request #2007 from peace-maker/riscv_insn_groups 2023-06-10 20:08:47 +08:00
bindings Merge pull request #2007 from peace-maker/riscv_insn_groups 2023-06-10 20:08:47 +08:00
contrib Constify backends (#1549) 2019-12-23 20:30:57 +08:00
cstool Add operands access support for TriCore 2023-05-30 12:27:38 +08:00
docs docs: Refactor project structure and remove unnecessary file. 2023-04-14 00:35:15 +08:00
include Merge branch 'next' into riscv_insn_groups 2023-05-30 16:23:34 +02:00
msvc fix: compile error missing file cstool msvc/visual studio 2023-04-19 22:27:26 -04:00
packages merge next to master 2018-07-20 12:36:50 +08:00
suite Merge branch 'next' into riscv_insn_groups 2023-05-30 16:23:34 +02:00
tests Add .clang-format and format 2023-05-30 11:09:37 +08:00
windows Fix user data alignment in MEMBLOCK (#1471) 2019-05-09 10:24:47 +08:00
windowsce Added documentation for building for Windows CE. 2016-04-12 09:26:47 +02:00
xcode merge next to master 2018-07-20 12:36:50 +08:00
.appveyor.yml rename appveyor.yml to .appveyor.yml 2016-03-15 00:01:10 +08:00
.clang-format Add .clang-format and format 2023-05-30 11:09:37 +08:00
.editorconfig Add OCaml to EditorConfig 2022-07-23 10:46:03 +02:00
.gitattributes Fix language statistics by considering *.inc files to be C files. (#1078) 2018-01-14 20:42:20 +08:00
.gitignore Fix all compiler errors 2023-04-14 00:34:16 +08:00
.travis.yml Fuzzit integration (#1520) 2019-07-25 09:06:52 +08:00
capstone-config.cmake.in Add cmake config and export targets. (#1637) 2020-06-02 20:58:33 +08:00
capstone.pc.in capstone.pc.in: re-add capstone include subdirectory via Cflags. 2023-06-16 10:02:51 -04:00
ChangeLog Update ChangeLog for v5.0.0-rc2 2022-02-28 22:13:21 +08:00
cmake_uninstall.cmake.in add cmake uninstall option 2022-01-27 14:22:43 +08:00
cmake.sh Fix pkgcfg generation for the archs variable (#1830) 2022-01-26 11:28:04 +08:00
CMakeLists.txt Add operands access support for TriCore 2023-05-30 12:27:38 +08:00
CMakePresets.json Merge cmake.yml into CITest.yml 2022-04-11 09:35:10 +02:00
COMPILE_CMAKE.TXT Modify Makefiles for TriCore architecture 2023-04-14 00:34:08 +08:00
COMPILE_MSVC.TXT Modify Makefiles for TriCore architecture 2023-04-14 00:34:08 +08:00
COMPILE.TXT Modify Makefiles for TriCore architecture 2023-04-14 00:34:08 +08:00
config.mk Merge branch 'next' into tricore 2023-04-27 13:23:35 +08:00
CREDITS.TXT Fix tricore python binding 2023-04-24 22:18:07 +08:00
cs_priv.h Merge pull request #1907 from FinnWilkinson/AArch64-Armv9.2-update 2022-10-06 17:27:20 +08:00
cs_simple_types.h Add operands access support for TriCore 2023-05-30 12:27:38 +08:00
cs.c fix tricore endian 2023-04-17 10:04:06 +08:00
functions.mk Fix if indent 2023-05-19 19:50:46 +01:00
HACK.TXT Fix HACK.TXT 2023-04-24 22:53:03 +08:00
LEB128.h sync with LLVM 7.0.1. X86 is first 2019-02-26 15:19:51 +08:00
LICENSE_LLVM.TXT initial import 2013-11-27 12:11:31 +08:00
LICENSE.TXT a a newline to LICENSE.TXT 2014-02-20 17:08:28 +08:00
make.sh build: add xlc and AIX support (#1559) 2019-10-31 04:02:31 +08:00
Makefile Add operands access support for TriCore 2023-05-30 12:27:38 +08:00
Mapping.c Add operands access support for TriCore 2023-05-30 12:27:38 +08:00
Mapping.h Add operands access support for TriCore 2023-05-30 12:27:38 +08:00
MathExtras.h sync with LLVM 7.0.1. X86 is first 2019-02-26 15:19:51 +08:00
MCDisassembler.h sync with LLVM 7.0.1. X86 is first 2019-02-26 15:19:51 +08:00
MCFixedLenDisassembler.h RISCV support ISRV32/ISRV64 (#1401) 2019-03-09 08:41:12 +08:00
MCInst.c Add .clang-format and format 2023-05-30 11:09:37 +08:00
MCInst.h Add .clang-format and format 2023-05-30 11:09:37 +08:00
MCInstrDesc.c Add .clang-format and format 2023-05-30 11:09:37 +08:00
MCInstrDesc.h Add .clang-format and format 2023-05-30 11:09:37 +08:00
MCRegisterInfo.c In x86: Fixed backward compatibility with C90 (#1969) 2023-03-10 08:37:47 +08:00
MCRegisterInfo.h arm64: sync with LLVM 7.0.1 2019-04-10 14:17:08 +08:00
nmake.bat Add cmake option to tell whether architectures should be included by default (#1463) (#1466) 2019-04-29 19:20:01 +07:00
pkgconfig.mk update pkgconfig.mk 2022-02-28 23:28:58 +08:00
README.md Update README.md 2023-05-03 22:47:14 +08:00
RELEASE_NOTES empty RELEASE_NOTES for v4.1 2018-12-19 07:50:18 +07:00
SPONSORS.TXT Add webassembly arch (#1359) 2019-02-01 23:03:47 +08:00
SStream.c ppc: sync with llvm 7.0.1 2019-04-30 13:50:42 +08:00
SStream.h ppc: sync with llvm 7.0.1 2019-04-30 13:50:42 +08:00
TODO TODO 2015-03-11 11:33:00 +08:00
utils.c Add .clang-format and format 2023-05-30 11:09:37 +08:00
utils.h Pull auto-sync's changes from 2ab11ad9bd 2023-05-30 11:08:18 +08:00

Capstone Engine

Build status pypi package pypi downloads oss-fuzz Status

Capstone is a disassembly framework with the target of becoming the ultimate disasm engine for binary analysis and reversing in the security community.

Created by Nguyen Anh Quynh, then developed and maintained by a small community, Capstone offers some unparalleled features:

  • Support multiple hardware architectures: ARM, ARM64 (ARMv8), BPF, Ethereum VM, M68K, M680X, Mips, MOS65XX, PPC, RISC-V(rv32G/rv64G), SH, Sparc, SystemZ, TMS320C64X, TriCore, Webassembly, XCore and X86 (16, 32, 64).

  • Having clean/simple/lightweight/intuitive architecture-neutral API.

  • Provide details on disassembled instruction (called “decomposer” by others).

  • Provide semantics of the disassembled instruction, such as list of implicit registers read & written.

  • Implemented in pure C language, with lightweight bindings for Swift, D, Clojure, F#, Common Lisp, Visual Basic, PHP, PowerShell, Emacs, Haskell, Perl, Python, Ruby, C#, NodeJS, Java, GO, C++, OCaml, Lua, Rust, Delphi, Free Pascal & Vala ready either in main code, or provided externally by the community).

  • Native support for all popular platforms: Windows, Mac OSX, iOS, Android, Linux, *BSD, Solaris, etc.

  • Thread-safe by design.

  • Special support for embedding into firmware or OS kernel.

  • High performance & suitable for malware analysis (capable of handling various X86 malware tricks).

  • Distributed under the open source BSD license.

Further information is available at http://www.capstone-engine.org

Compile

See COMPILE.TXT file for how to compile and install Capstone.

Documentation

See docs/README for how to customize & program your own tools with Capstone.

Hack

See HACK.TXT file for the structure of the source code.

Fuzz

See suite/fuzz/README.md for more information.

License

This project is released under the BSD license. If you redistribute the binary or source code of Capstone, please attach file LICENSE.TXT with your products.