diff --git a/bindings/ocaml/ffi_types.ml b/bindings/ocaml/ffi_types.ml index acfb048a8a9f715a44aafc4794372ad16488cdf8..82e13f9afe6524f54b019deabd8f49866b942b64 100644 --- a/bindings/ocaml/ffi_types.ml +++ b/bindings/ocaml/ffi_types.ml @@ -349,6 +349,7 @@ module Types (F: Cstubs.Types.TYPE) = | KS_OPT_SYNTAX_NASM | KS_OPT_SYNTAX_MASM | KS_OPT_SYNTAX_GAS + | KS_OPT_SYNTAX_RADIX16 let ks_opt_syntax_intel = constant "KS_OPT_SYNTAX_INTEL" int64_t @@ -356,6 +357,7 @@ module Types (F: Cstubs.Types.TYPE) = let ks_opt_syntax_nasm = constant "KS_OPT_SYNTAX_NASM" int64_t let ks_opt_syntax_masm = constant "KS_OPT_SYNTAX_MASM" int64_t let ks_opt_syntax_gas = constant "KS_OPT_SYNTAX_GAS" int64_t + let ks_opt_syntax_radix16 = constant "KS_OPT_SYNTAX_RADIX16" int64_t let ks_opt_value = enum "ks_opt_value" [ KS_OPT_SYNTAX_INTEL, ks_opt_syntax_intel; @@ -363,6 +365,7 @@ module Types (F: Cstubs.Types.TYPE) = KS_OPT_SYNTAX_NASM, ks_opt_syntax_nasm; KS_OPT_SYNTAX_MASM, ks_opt_syntax_masm; KS_OPT_SYNTAX_GAS, ks_opt_syntax_gas; + KS_OPT_SYNTAX_RADIX16, ks_opt_syntax_radix16 ] diff --git a/bindings/ocaml/keystone.mli b/bindings/ocaml/keystone.mli index 4fdb255550499228278db9a14850f98727314a7e..b4991fbd018c871ea162f72f75f75235f567e1f3 100644 --- a/bindings/ocaml/keystone.mli +++ b/bindings/ocaml/keystone.mli @@ -75,6 +75,7 @@ module Types : sig | KS_OPT_SYNTAX_NASM | KS_OPT_SYNTAX_MASM | KS_OPT_SYNTAX_GAS + | KS_OPT_SYNTAX_RADIX16 type ks_mode = | KS_MODE_ARM diff --git a/bindings/ocaml/test_bindings.ml b/bindings/ocaml/test_bindings.ml index 09d3f2b4057a2d6896140ed9cb7ff2a26d06d23e..790e0c20682b62341373281e4f4ef68abd89bfb7 100644 --- a/bindings/ocaml/test_bindings.ml +++ b/bindings/ocaml/test_bindings.ml @@ -3,6 +3,7 @@ open Keystone module T = Keystone.Types let test_ks arch mode ?(syntax=T.KS_OPT_SYNTAX_INTEL) ?(endian=T.KS_MODE_LITTLE_ENDIAN) asm = + Printf.printf "ASSEMBLING %s\n" asm; flush stdout; match (ks_open arch ~endian:endian mode) with | Result.Ok engine -> begin @@ -16,7 +17,8 @@ let test_ks arch mode ?(syntax=T.KS_OPT_SYNTAX_INTEL) ?(endian=T.KS_MODE_LITTLE_ result.stat_count; ignore(ks_close engine) - | Result.Error s -> Printf.printf "ERROR: failed on ks_asm with: %s\n" s + | Result.Error s -> ignore (ks_close engine); + Printf.printf "ERROR: failed on ks_asm with: %s\n" s end | Result.Error e -> Printf.printf "ERROR: failed on ks_open: %s\n" e @@ -28,6 +30,7 @@ let _ = test_ks T.KS_ARCH_X86 T.KS_MODE_64 "add rax, rcx"; test_ks T.KS_ARCH_X86 T.KS_MODE_32 ~syntax:T.KS_OPT_SYNTAX_ATT "add %ecx, %eax"; test_ks T.KS_ARCH_X86 T.KS_MODE_64 ~syntax:T.KS_OPT_SYNTAX_ATT "add %rcx, %rax"; + test_ks T.KS_ARCH_X86 T.KS_MODE_32 ~syntax:T.KS_OPT_SYNTAX_RADIX16 "add eax, 0x15"; test_ks T.KS_ARCH_ARM T.KS_MODE_ARM "sub r1, r2, r5"; test_ks T.KS_ARCH_ARM T.KS_MODE_ARM "sub r1, r2, r5"; @@ -52,4 +55,4 @@ let _ = test_ks T.KS_ARCH_SPARC T.KS_MODE_SPARC32 "add %g1, %g2, %g3"; test_ks T.KS_ARCH_SPARC T.KS_MODE_SPARC32 ~endian:T.KS_MODE_BIG_ENDIAN "add %g1, %g2, %g3"; - test_ks T.KS_ARCH_SYSTEMZ T.KS_MODE_BIG_ENDIAN "a %r0, 4092(%r15, %r1)" + test_ks T.KS_ARCH_SYSTEMZ T.KS_MODE_BIG_ENDIAN "a %r0, 4095(%r15, %r1)"