xref: /aosp_15_r20/external/capstone/HACK.TXT (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf EbrahimiCode structure
2*9a0e4156SSadaf Ebrahimi--------------
3*9a0e4156SSadaf Ebrahimi
4*9a0e4156SSadaf EbrahimiCapstone source is organized as followings.
5*9a0e4156SSadaf Ebrahimi
6*9a0e4156SSadaf Ebrahimi.                   <- core engine + README + COMPILE.TXT etc
7*9a0e4156SSadaf Ebrahimi├── arch            <- code handling disasm engine for each arch
8*9a0e4156SSadaf Ebrahimi│   ├── AArch64     <- ARM64 (aka ARMv8) engine
9*9a0e4156SSadaf Ebrahimi│   ├── ARM         <- ARM engine
10*9a0e4156SSadaf Ebrahimi│   ├── EVM         <- Ethereum engine
11*9a0e4156SSadaf Ebrahimi│   ├── M680X       <- M680X engine
12*9a0e4156SSadaf Ebrahimi│   ├── M68K        <- M68K engine
13*9a0e4156SSadaf Ebrahimi│   ├── Mips        <- Mips engine
14*9a0e4156SSadaf Ebrahimi│   ├── MOS65XX     <- MOS65XX engine
15*9a0e4156SSadaf Ebrahimi│   ├── PowerPC     <- PowerPC engine
16*9a0e4156SSadaf Ebrahimi│   ├── Sparc       <- Sparc engine
17*9a0e4156SSadaf Ebrahimi│   ├── SystemZ     <- SystemZ engine
18*9a0e4156SSadaf Ebrahimi│   ├── TMS320C64x  <- TMS320C64x engine
19*9a0e4156SSadaf Ebrahimi│   ├── X86         <- X86 engine
20*9a0e4156SSadaf Ebrahimi│   └── XCore       <- XCore engine
21*9a0e4156SSadaf Ebrahimi├── bindings        <- all bindings are under this dir
22*9a0e4156SSadaf Ebrahimi│   ├── java        <- Java bindings + test code
23*9a0e4156SSadaf Ebrahimi│   ├── ocaml       <- Ocaml bindings + test code
24*9a0e4156SSadaf Ebrahimi│   └── python      <- Python bindings + test code
25*9a0e4156SSadaf Ebrahimi├── contrib         <- Code contributed by community to help Capstone integration
26*9a0e4156SSadaf Ebrahimi├── cstool          <- Cstool
27*9a0e4156SSadaf Ebrahimi├── docs            <- Documentation
28*9a0e4156SSadaf Ebrahimi├── include         <- API headers in C language (*.h)
29*9a0e4156SSadaf Ebrahimi├── msvc            <- Microsoft Visual Studio support (for Windows compile)
30*9a0e4156SSadaf Ebrahimi├── packages        <- Packages for Linux/OSX/BSD.
31*9a0e4156SSadaf Ebrahimi├── windows         <- Windows support (for Windows kernel driver compile)
32*9a0e4156SSadaf Ebrahimi├── suite           <- Development test tools - for Capstone developers only
33*9a0e4156SSadaf Ebrahimi├── tests           <- Test code (in C language)
34*9a0e4156SSadaf Ebrahimi└── xcode           <- Xcode support (for MacOSX compile)
35*9a0e4156SSadaf Ebrahimi
36*9a0e4156SSadaf Ebrahimi
37*9a0e4156SSadaf EbrahimiFollow instructions in COMPILE.TXT for how to compile and run test code.
38*9a0e4156SSadaf Ebrahimi
39*9a0e4156SSadaf EbrahimiNote: if you find some strange bugs, it is recommended to firstly clean
40*9a0e4156SSadaf Ebrahimithe code and try to recompile/reinstall again. This can be done with:
41*9a0e4156SSadaf Ebrahimi
42*9a0e4156SSadaf Ebrahimi	$ ./make.sh
43*9a0e4156SSadaf Ebrahimi	$ sudo ./make.sh install
44*9a0e4156SSadaf Ebrahimi
45*9a0e4156SSadaf EbrahimiThen test Capstone with cstool, for example:
46*9a0e4156SSadaf Ebrahimi
47*9a0e4156SSadaf Ebrahimi	$ cstool x32 "90 91"
48*9a0e4156SSadaf Ebrahimi
49*9a0e4156SSadaf EbrahimiAt the same time, for Java/Ocaml/Python bindings, be sure to always use
50*9a0e4156SSadaf Ebrahimithe bindings coming with the core to avoid potential incompatibility issue
51*9a0e4156SSadaf Ebrahimiwith older versions.
52*9a0e4156SSadaf EbrahimiSee bindings/<language>/README for detail instructions on how to compile &
53*9a0e4156SSadaf Ebrahimiinstall the bindings.
54*9a0e4156SSadaf Ebrahimi
55*9a0e4156SSadaf Ebrahimi
56*9a0e4156SSadaf EbrahimiCoding style
57*9a0e4156SSadaf Ebrahimi------------
58*9a0e4156SSadaf Ebrahimi- C code follows Linux kernel coding style, using tabs for indentation.
59*9a0e4156SSadaf Ebrahimi- Python code uses 4 spaces for indentation.
60*9a0e4156SSadaf Ebrahimi
61*9a0e4156SSadaf Ebrahimi
62*9a0e4156SSadaf EbrahimiAdding an architecture
63*9a0e4156SSadaf Ebrahimi----------------------
64*9a0e4156SSadaf Ebrahimi
65*9a0e4156SSadaf EbrahimiObviously, you first need to write all the logic and put it in a new directory arch/newarch
66*9a0e4156SSadaf EbrahimiThen, you have to modify other files.
67*9a0e4156SSadaf Ebrahimi(You can look for one architecture such as EVM in these files to get what you need to do)
68*9a0e4156SSadaf Ebrahimi
69*9a0e4156SSadaf EbrahimiIntegrate:
70*9a0e4156SSadaf Ebrahimi- cs.c
71*9a0e4156SSadaf Ebrahimi- cstool/cstool.c
72*9a0e4156SSadaf Ebrahimi- cstool/cstool_newarch.c: print the architecture specific details
73*9a0e4156SSadaf Ebrahimi- include/capstone/capstone.h
74*9a0e4156SSadaf Ebrahimi- include/capstone/newarch.h: create this file to export all specifics about the new architecture
75*9a0e4156SSadaf Ebrahimi
76*9a0e4156SSadaf EbrahimiCompile:
77*9a0e4156SSadaf Ebrahimi- CMakeLists.txt
78*9a0e4156SSadaf Ebrahimi- Makefile
79*9a0e4156SSadaf Ebrahimi- config.mk
80*9a0e4156SSadaf Ebrahimi
81*9a0e4156SSadaf EbrahimiTests:
82*9a0e4156SSadaf Ebrahimi- tests/Makefile
83*9a0e4156SSadaf Ebrahimi- tests/test_basic.c
84*9a0e4156SSadaf Ebrahimi- tests/test_detail.c
85*9a0e4156SSadaf Ebrahimi- tests/test_iter.c
86*9a0e4156SSadaf Ebrahimi- tests/test_newarch.c
87*9a0e4156SSadaf Ebrahimi- suite/fuzz/fuzz_disasm.c: add the architecture and its modes to the list of fuzzed platforms
88*9a0e4156SSadaf Ebrahimi
89*9a0e4156SSadaf EbrahimiBindings:
90*9a0e4156SSadaf Ebrahimi- bindings/Makefile
91*9a0e4156SSadaf Ebrahimi- bindings/const_generator.py: add the header file and the architecture
92*9a0e4156SSadaf Ebrahimi- bindings/python/Makefile
93*9a0e4156SSadaf Ebrahimi- bindings/python/capstone/__init__.py
94*9a0e4156SSadaf Ebrahimi- bindings/python/capstone/newarch.py: define the python structures
95*9a0e4156SSadaf Ebrahimi- bindings/python/capstone/newarch_const.py: generate this file
96*9a0e4156SSadaf Ebrahimi- bindings/python/test_newarch.py: create a basic decoding test
97*9a0e4156SSadaf Ebrahimi- bindings/python/test_all.py
98*9a0e4156SSadaf Ebrahimi
99*9a0e4156SSadaf EbrahimiDocs:
100*9a0e4156SSadaf Ebrahimi- README.md
101*9a0e4156SSadaf Ebrahimi- HACK.txt
102*9a0e4156SSadaf Ebrahimi- CREDITS.txt: add your name
103