xref: /aosp_15_r20/external/capstone/bindings/python/BUILDING.txt (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi0. This documentation explains how to install the Python bindings for Capstone
2*9a0e4156SSadaf Ebrahimi   from source. If you want to install it from a PyPi package (recommended if
3*9a0e4156SSadaf Ebrahimi   you are on Windows), see README.txt.
4*9a0e4156SSadaf Ebrahimi
5*9a0e4156SSadaf Ebrahimi1. To install Capstone and the Python bindings on *nix, run the command below:
6*9a0e4156SSadaf Ebrahimi
7*9a0e4156SSadaf Ebrahimi		$ sudo make install
8*9a0e4156SSadaf Ebrahimi
9*9a0e4156SSadaf Ebrahimi   To install Capstone for Python 3, run the command below:
10*9a0e4156SSadaf Ebrahimi   (Note: this requires python3 installed in your machine)
11*9a0e4156SSadaf Ebrahimi
12*9a0e4156SSadaf Ebrahimi		$ sudo make install3
13*9a0e4156SSadaf Ebrahimi
14*9a0e4156SSadaf Ebrahimi   To control the install destination, set the DESTDIR environment variable.
15*9a0e4156SSadaf Ebrahimi
16*9a0e4156SSadaf Ebrahimi2. For better Python performance, install cython-based binding with:
17*9a0e4156SSadaf Ebrahimi
18*9a0e4156SSadaf Ebrahimi		$ sudo make install_cython
19*9a0e4156SSadaf Ebrahimi
20*9a0e4156SSadaf Ebrahimi	Note that this requires Cython installed first. To install Cython, see
21*9a0e4156SSadaf Ebrahimi	below.
22*9a0e4156SSadaf Ebrahimi
23*9a0e4156SSadaf Ebrahimi3. To install Cython, you have to ensure that the header files
24*9a0e4156SSadaf Ebrahimi   and the static library for Python are installed beforehand.
25*9a0e4156SSadaf Ebrahimi
26*9a0e4156SSadaf Ebrahimi	E.g. on Ubuntu, do:
27*9a0e4156SSadaf Ebrahimi
28*9a0e4156SSadaf Ebrahimi		$ sudo apt-get install python-dev
29*9a0e4156SSadaf Ebrahimi
30*9a0e4156SSadaf Ebrahimi	Depending on if you already have pip or easy_install installed, install
31*9a0e4156SSadaf Ebrahimi	Cython with either:
32*9a0e4156SSadaf Ebrahimi
33*9a0e4156SSadaf Ebrahimi		$ sudo pip install cython
34*9a0e4156SSadaf Ebrahimi	or:
35*9a0e4156SSadaf Ebrahimi		$ sudo easy_install cython
36*9a0e4156SSadaf Ebrahimi
37*9a0e4156SSadaf Ebrahimi	NOTE: Depending on your distribution you might also be able to
38*9a0e4156SSadaf Ebrahimi	      install the required Cython version using your repository.
39*9a0e4156SSadaf Ebrahimi
40*9a0e4156SSadaf Ebrahimi	E.g. on Ubuntu, do:
41*9a0e4156SSadaf Ebrahimi
42*9a0e4156SSadaf Ebrahimi		$ sudo apt-get install cython
43*9a0e4156SSadaf Ebrahimi
44*9a0e4156SSadaf Ebrahimi	However, our cython-based binding requires Cython version 0.19 or newer,
45*9a0e4156SSadaf Ebrahimi	but sometimes distributions only provide older version. Make sure to
46*9a0e4156SSadaf Ebrahimi	verify the current installed version before going into section 2 above.
47*9a0e4156SSadaf Ebrahimi
48*9a0e4156SSadaf Ebrahimi	E.g, on Ubuntu, you can verify the current Cython version with:
49*9a0e4156SSadaf Ebrahimi
50*9a0e4156SSadaf Ebrahimi		$ apt-cache policy cython
51*9a0e4156SSadaf Ebrahimi
52*9a0e4156SSadaf Ebrahimi	Which should at least print version 0.19
53*9a0e4156SSadaf Ebrahimi
54*9a0e4156SSadaf Ebrahimi4. This directory contains some test code to show how to use the Capstone API.
55*9a0e4156SSadaf Ebrahimi
56*9a0e4156SSadaf Ebrahimi- test_basic.py
57*9a0e4156SSadaf Ebrahimi  This code shows the most simple form of API where we only want to get basic
58*9a0e4156SSadaf Ebrahimi  information out of disassembled instruction, such as address, mnemonic and
59*9a0e4156SSadaf Ebrahimi  operand string.
60*9a0e4156SSadaf Ebrahimi
61*9a0e4156SSadaf Ebrahimi- test_lite.py
62*9a0e4156SSadaf Ebrahimi  Similarly to test_basic.py, but this code shows how to use disasm_lite(), a lighter
63*9a0e4156SSadaf Ebrahimi  method to disassemble binary. Unlike disasm() API (used by test_basic.py), which returns
64*9a0e4156SSadaf Ebrahimi  CsInsn objects, this API just returns tuples of (address, size, mnemonic, op_str).
65*9a0e4156SSadaf Ebrahimi
66*9a0e4156SSadaf Ebrahimi  The main reason for using this API is better performance: disasm_lite() is at least
67*9a0e4156SSadaf Ebrahimi  20% faster than disasm(). Memory usage is also less. So if you just need basic
68*9a0e4156SSadaf Ebrahimi  information out of disassembler, use disasm_lite() instead of disasm().
69*9a0e4156SSadaf Ebrahimi
70*9a0e4156SSadaf Ebrahimi- test_detail.py:
71*9a0e4156SSadaf Ebrahimi  This code shows how to access to architecture-neutral information in disassembled
72*9a0e4156SSadaf Ebrahimi  instructions, such as implicit registers read/written, or groups of instructions
73*9a0e4156SSadaf Ebrahimi  that this instruction belong to.
74*9a0e4156SSadaf Ebrahimi
75*9a0e4156SSadaf Ebrahimi- test_<arch>.py
76*9a0e4156SSadaf Ebrahimi  These code show how to access architecture-specific information for each
77*9a0e4156SSadaf Ebrahimi  architecture.
78