diff options
Diffstat (limited to 'capstone/HACK.TXT')
-rw-r--r-- | capstone/HACK.TXT | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/capstone/HACK.TXT b/capstone/HACK.TXT new file mode 100644 index 000000000..228ec5fb3 --- /dev/null +++ b/capstone/HACK.TXT @@ -0,0 +1,106 @@ +Code structure +-------------- + +Capstone source is organized as followings. + +. <- core engine + README + COMPILE.TXT etc +├── arch <- code handling disasm engine for each arch +│ ├── AArch64 <- ARM64 (aka ARMv8) engine +│ ├── ARM <- ARM engine +│ ├── BPF <- Berkeley Packet Filter engine +│ ├── EVM <- Ethereum engine +│ ├── M680X <- M680X engine +│ ├── M68K <- M68K engine +│ ├── Mips <- Mips engine +│ ├── MOS65XX <- MOS65XX engine +│ ├── PowerPC <- PowerPC engine +│ ├── Sparc <- Sparc engine +│ ├── SystemZ <- SystemZ engine +│ ├── TMS320C64x <- TMS320C64x engine +│ ├── X86 <- X86 engine +│ └── XCore <- XCore engine +├── bindings <- all bindings are under this dir +│ ├── java <- Java bindings + test code +│ ├── ocaml <- Ocaml bindings + test code +│ └── python <- Python bindings + test code +├── contrib <- Code contributed by community to help Capstone integration +├── cstool <- Cstool +├── docs <- Documentation +├── include <- API headers in C language (*.h) +├── msvc <- Microsoft Visual Studio support (for Windows compile) +├── packages <- Packages for Linux/OSX/BSD. +├── windows <- Windows support (for Windows kernel driver compile) +├── suite <- Development test tools - for Capstone developers only +├── tests <- Test code (in C language) +└── xcode <- Xcode support (for MacOSX compile) + + +Follow instructions in COMPILE.TXT for how to compile and run test code. + +Note: if you find some strange bugs, it is recommended to firstly clean +the code and try to recompile/reinstall again. This can be done with: + + $ ./make.sh + $ sudo ./make.sh install + +Then test Capstone with cstool, for example: + + $ cstool x32 "90 91" + +At the same time, for Java/Ocaml/Python bindings, be sure to always use +the bindings coming with the core to avoid potential incompatibility issue +with older versions. +See bindings/<language>/README for detail instructions on how to compile & +install the bindings. + + +Coding style +------------ +- C code follows Linux kernel coding style, using tabs for indentation. +- Python code uses 4 spaces for indentation. + + +Adding an architecture +---------------------- + +Obviously, you first need to write all the logic and put it in a new directory arch/newarch +Then, you have to modify other files. +(You can look for one architecture such as EVM in these files to get what you need to do) + +Integrate: +- cs.c +- cstool/cstool.c +- cstool/cstool_newarch.c: print the architecture specific details +- include/capstone/capstone.h +- include/capstone/newarch.h: create this file to export all specifics about the new architecture + +Compile: +- CMakeLists.txt +- Makefile +- config.mk + +Tests: +- tests/Makefile +- tests/test_basic.c +- tests/test_detail.c +- tests/test_iter.c +- tests/test_newarch.c +- suite/fuzz/fuzz_disasm.c: add the architecture and its modes to the list of fuzzed platforms +- suite/capstone_get_setup.c +- suite/MC/newarch/mode.mc: samples +- suite/test_corpus.py: correspondence between architecture and mode as text and architecture number for fuzzing + +Bindings: +- bindings/Makefile +- bindings/const_generator.py: add the header file and the architecture +- bindings/python/Makefile +- bindings/python/capstone/__init__.py +- bindings/python/capstone/newarch.py: define the python structures +- bindings/python/capstone/newarch_const.py: generate this file +- bindings/python/test_newarch.py: create a basic decoding test +- bindings/python/test_all.py + +Docs: +- README.md +- HACK.txt +- CREDITS.txt: add your name |