recover some files changed by last merge

This commit is contained in:
Nguyen Anh Quynh 2014-01-23 21:06:23 +08:00
parent b8a57fe285
commit 2be19c40c1
4 changed files with 86 additions and 13 deletions

View File

@ -42,7 +42,7 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
Users are then required to enter root password to copy Capstone into machine Users are then required to enter root password to copy Capstone into machine
system directories. system directories.
Afterwards, run "./tests/test*" to see the tests disassembling sample code. Afterwards, run ./tests/test* to see the tests disassembling sample code.
NOTE: The core framework installed by "./make.sh install" consist of NOTE: The core framework installed by "./make.sh install" consist of
@ -70,7 +70,8 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
- To cross-compile Windows 64-bit binary, run: - To cross-compile Windows 64-bit binary, run:
$ ./make.sh cross-win64 $ ./make.sh cross-win64
Resulted files "capstone.dll" and "tests/test*.exe" can then be used on Windows machine. Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then
be used on Windows machine.
@ -84,6 +85,8 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
- To compile Windows 64-bit binary under Cygwin, run - To compile Windows 64-bit binary under Cygwin, run
$ ./make.sh cygwin-mingw64 $ ./make.sh cygwin-mingw64
Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then
be used on Windows machine.
(5) By default, "cc" (default C compiler on the system) is used as compiler. (5) By default, "cc" (default C compiler on the system) is used as compiler.
@ -100,6 +103,9 @@ Capstone requires no prerequisite packages, so it is easy to compile & install.
(6) Language bindings (6) Language bindings
So far, Python, Ruby, Ocaml, Java, C# and Go are supported by bindings. Look for So far, Python, Ocaml & Java are supported by bindings in the main code.
the bindings under directory bindings/, and refer to README file of Look for the bindings under directory bindings/, and refer to README file
corresponding languages. of corresponding languages.
Community also provide bindings for C#, Go, Ruby & Vala. Links to these can
be found at address http://capstone-engine.org/download.html

View File

@ -1,11 +1,72 @@
This file details the changelog of Capstone. This file details the changelog of Capstone.
---------------------------------
Version 2.0: January 22nd, 2014
[Version 2.0]: upcoming Release 2.0 deprecates verison 1.0 and brings a lot of crucial changes.
- See changelog at https://github.com/aquynh/capstone/wiki/ChangeLog [ API changes ]
- API version has been bumped to 2.0 (see cs_version() API)
- New API cs_strerror(errno) returns a string describing error code given
in its only argument.
- cs_version() now returns combined version encoding both major & minor versions.
- New option CS_OPT_MODE allows to change engines mode at run-time with
cs_option().
- New option CS_OPT_MEM allows to specify user-defined functions for dynamically
memory management used internally by Capstone. This is useful to embed Capstone
into special environments such as kernel or firware.
- New API cs_support() can be used to check if this lib supports a particular
architecture (this is necessary since we now allow to choose which architectures
to compile in).
- The detail option is OFF by default now. To get detail information, it should be
explicitly turned ON. The details then can be accessed using cs_insn.detail
pointer (to newly added structure cs_detail)
[ Core changes ]
- On memory usage, Capstone uses much less memory, but a lot faster now.
- User now can choose which architectures to be supported by modifying config.mk
before compiling/installing.
[ Architectures ]
- Arm
- Support Big-Endian mode (besides Little-Endian mode).
- Support friendly register, so instead of output sub "r12,r11,0x14",
we have "sub ip,fp,0x14".
- Arm64: support Big-Endian mode (besides Little-Endian mode).
- PowerPC: newly added.
- Mips: support friendly register, so instead of output "srl $2,$1,0x1f",
we have "srl $v0,$at,0x1f".
- X86: bug fixes.
[ Python binding ]
- Python binding is vastly improved in performance: around 3 ~ 4 times faster
than in 1.0.
- Cython support has been added, which can further speed up over the default
pure Python binding (up to 30% in some cases)
- Function cs_disasm_quick() & Cs.disasm() now use generator (rather than a list)
to return succesfully disassembled instructions. This improves the performance
and reduces memory usage.
[ Java binding ]
- Better performance & bug fixes.
[ Miscellaneous ]
- Fixed some installation issues with Gentoo Linux.
- Capstone now can easily compile/install on all *nix, including Linux, OSX,
{Net, Free, Open}BSD & Solaris.
----------------------------------
[Version 1.0]: December 18th, 2013 [Version 1.0]: December 18th, 2013
- Initial public release. - Initial public release.

7
README
View File

@ -11,10 +11,11 @@ Capstone offers some unparalleled features:
- Provide details on disassembled instruction (called “decomposer” by others). - Provide details on disassembled instruction (called “decomposer” by others).
- Provide semantics of the disassembled instruction, such as list of implicit - Provide semantics of the disassembled instruction, such as list of implicit
registers read & written. registers read & written.
- Implemented in pure C language, with lightweight wrappers for C++, Python, - Implemented in pure C language, with lightweight wrappers for C++, C#, Go,
Ruby, OCaml, C#, Java and Go available. Java, Ocaml, Python, Ruby & Vala ready (either available in main code,
or provided externally by community).
- Native support for Windows & *nix platforms (with OSX, Linux, *BSD & Solaris - Native support for Windows & *nix platforms (with OSX, Linux, *BSD & Solaris
have been confirmed). have been confirmed).

View File

@ -36,6 +36,10 @@ all_tests = (
) )
# for debugging
def to_hex(s):
return " ".join("0x" + "{0:x}".format(ord(c)).zfill(2) for c in s) # <-- Python 3 is OK
def get_code(f, size): def get_code(f, size):
code = f.read(size) code = f.read(size)
if len(code) != size: # reached end-of-file? if len(code) != size: # reached end-of-file?
@ -55,9 +59,6 @@ def cs(md, code):
print i print i
md = Cs(CS_ARCH_X86, CS_MODE_32)
md.detail = False
cfile = open(FILE) cfile = open(FILE)
for (arch, mode, comment, syntax) in all_tests: for (arch, mode, comment, syntax) in all_tests:
@ -80,12 +81,16 @@ for (arch, mode, comment, syntax) in all_tests:
cfile.seek(0) cfile.seek(0)
for i in xrange(3): for i in xrange(3):
code = get_code(cfile, 128) code = get_code(cfile, 128)
#print to_hex(code)
#print
cs(md, code) cs(md, code)
# start real benchmark # start real benchmark
c_t = 0 c_t = 0
for i in xrange(50000): for i in xrange(50000):
code = get_code(cfile, 128) code = get_code(cfile, 128)
#print to_hex(code)
#print
t1 = time() t1 = time()
cs(md, code) cs(md, code)