mirror of
https://github.com/capstone-engine/capstone
synced 2026-08-11 16:26:07 -04:00
When the python bindings are installed using the new wheels
infrastructure, data_files are relative to the site-packages directory
even if using absolute paths.
The following example demonstrates the bug fixed by this commit: (ran on archlinux)
```bash
$ pip install wheel # if this package is installed, wheel installation is made the default
Collecting wheel
Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
100% |################################| 71kB 124kB/s
Installing collected packages: wheel
Successfully installed wheel-0.29.0
$ pip install capstone # this will use the wheel installation method now
Collecting capstone
Using cached capstone-3.0.4.tar.gz
Building wheels for collected packages: capstone
Running setup.py bdist_wheel for capstone ... done
Stored in directory: /root/.cache/pip/wheels/7c/d1/d0/db6e2c5ef1063aabb9de2dd8b92b4c27ee6f9fd213240099b8
Successfully built capstone
Installing collected packages: capstone
Successfully installed capstone-3.0.4
$ find /usr/lib/ -name "libcapstone.so"
/usr/lib/python3.5/site-packages/usr/lib/python3.5/site-packages/capstone/libcapstone.so
```
So the path `SITE_PACKAGES` in the `data_files` specification of the
setup.py file was interpreted relative to the python site-packages
directory. The fix for this is simple: use `/capstone` instead of an
absolute path for `SITE_PACKAGES`.
|
||
|---|---|---|
| .. | ||
| capstone | ||
| prebuilt | ||
| pyx | ||
| .gitignore | ||
| LICENSE.TXT | ||
| Makefile | ||
| MANIFEST.in | ||
| PKG-INFO.src | ||
| PKG-INFO.win | ||
| README.pypi-src | ||
| README.pypi-win | ||
| README.TXT | ||
| setup.py | ||
| setup_cython.py | ||
| test_all.py | ||
| test_arm.py | ||
| test_arm64.py | ||
| test_basic.py | ||
| test_customized_mnem.py | ||
| test_detail.py | ||
| test_lite.py | ||
| test_m68k.py | ||
| test_mips.py | ||
| test_ppc.py | ||
| test_skipdata.py | ||
| test_sparc.py | ||
| test_systemz.py | ||
| test_x86.py | ||
| test_xcore.py | ||
| xprint.py | ||
0. This documentation explains how to install Python binding for Capstone
from source. If you want to install it from PyPi package, see the below
docs instead:
- README.pypi-src: How to compile the Capstone core & install binding
at the same time from PyPi package "capstone"
- README.pypi-win: How to install binding for Windows from PyPi package
"capstone-windows". Note that this package already has prebuilt core
inside, so no compilation is needed.
1. To install pure Python binding on *nix, run the command below:
$ sudo make install
To install Python3 binding package, run the command below:
(Note: this requires python3 installed in your machine)
$ sudo make install3
2. For better Python performance, install cython-based binding with:
$ sudo make install_cython
Note that this requires cython installed in your machine first.
To install cython, see section 3 below.
3. To install cython, you have to ensure that the header files
and the static library for Python are installed beforehand.
E.g. on Ubuntu, do:
$ sudo apt-get install python-dev
Depending on if you already have pip or easy_install
installed, install cython with either:
$ sudo pip install cython
or:
$ sudo easy_install cython
NOTE: Depending on your distribution you might also be able to
install the required cython version using your repository.
E.g. on Ubuntu, do:
$ sudo apt-get install cython
However, our cython-based binding requires cython version 0.19 or newer,
but sometimes distributions only provide older version. Make sure to
verify the current installed version before going into section 2 above.
E.g, on Ubuntu, you can verify the current cython version with:
$ apt-cache policy cython
Which should at least print version 0.19
This directory contains some test code to show how to use Capstone API.
- test_basic.py
This code shows the most simple form of API where we only want to get basic
information out of disassembled instruction, such as address, mnemonic and
operand string.
- test_lite.py
Similarly to test_basic.py, but this code shows how to use disasm_lite(), a lighter
method to disassemble binary. Unlike disasm() API (used by test_basic.py), which returns
CsInsn objects, this API just returns tuples of (address, size, mnemonic, op_str).
The main reason for using this API is better performance: disasm_lite() is at least
20% faster than disasm(). Memory usage is also less. So if you just need basic
information out of disassembler, use disasm_lite() instead of disasm().
- test_detail.py:
This code shows how to access to architecture-neutral information in disassembled
instructions, such as implicit registers read/written, or groups of instructions
that this instruction belong to.
- test_<arch>.py
These code show how to access architecture-specific information for each
architecture.
2. To install Python binding on Windows:
Recommended method:
Use the Python module installer for 32/64 bit Windows from:
http://www.capstone-engine.org/download.html
Manual method:
If the module installer fails to locate your Python install, or if you have
additional Python installs (e.g. Anaconda / virtualenv), run the following
command in command prompt:
C:\> C:\location_to_python\python.exe setup.py install
Next, copy capstone.dll from the 'Core engine for Windows' package available
on the same Capstone download page and paste it in the path:
C:\location_to_python\Lib\site-packages\capstone\