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