You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
4.2 KiB

(** Module proving OCaml bindings to the Keystone assembler engine *)
module Types : sig
(** Type definitions for Keystone *)
(** Keystone engine type *)
type ks_t
(** Keystone Architecture. Please see keystone.h for a full description. *)
type ks_arch =
| KS_ARCH_ARM
| KS_ARCH_ARM64
| KS_ARCH_MIPS
| KS_ARCH_X86
| KS_ARCH_PPC
| KS_ARCH_SPARC
| KS_ARCH_SYSTEMZ
| KS_ARCH_HEXAGON
| KS_ARCH_MAX
(** Keystone error types. Please see keystone.h for a full description. *)
type ks_error =
| KS_ERR_OK
| KS_ERR_NOMEM
| KS_ERR_ARCH
| KS_ERR_HANDLE
| KS_ERR_MODE
| KS_ERR_VERSION
| KS_ERR_OPT_INVALID
| KS_ERR_ASM_EXPR_TOKEN
| KS_ERR_ASM_DIRECTIVE_VALUE_RANGE
| KS_ERR_ASM_DIRECTIVE_ID
| KS_ERR_ASM_DIRECTIVE_TOKEN
| KS_ERR_ASM_DIRECTIVE_STR
| KS_ERR_ASM_DIRECTIVE_COMMA
| KS_ERR_ASM_DIRECTIVE_RELOC_NAME
| KS_ERR_ASM_DIRECTIVE_RELOC_TOKEN
| KS_ERR_ASM_DIRECTIVE_FPOINT
| KS_ERR_ASM_DIRECTIVE_UNKNOWN
| KS_ERR_ASM_VARIANT_INVALID
| KS_ERR_ASM_DIRECTIVE_EQU
| KS_ERR_ASM_EXPR_BRACKET
| KS_ERR_ASM_SYMBOL_MODIFIER
| KS_ERR_ASM_SYMBOL_REDEFINED
| KS_ERR_ASM_SYMBOL_MISSING
| KS_ERR_ASM_RPAREN
| KS_ERR_ASM_STAT_TOKEN
| KS_ERR_ASM_UNSUPPORTED
| KS_ERR_ASM_MACRO_TOKEN
| KS_ERR_ASM_MACRO_PAREN
| KS_ERR_ASM_MACRO_EQU
| KS_ERR_ASM_MACRO_ARGS
| KS_ERR_ASM_MACRO_LEVELS_EXCEED
| KS_ERR_ASM_MACRO_STR
| KS_ERR_ASM_ESC_BACKSLASH
| KS_ERR_ASM_ESC_OCTAL
| KS_ERR_ASM_ESC_SEQUENCE
| KS_ERR_ASM_ESC_STR
| KS_ERR_ASM_TOKEN_INVALID
| KS_ERR_ASM_INSN_UNSUPPORTED
| KS_ERR_ASM_FIXUP_INVALID
| KS_ERR_ASM_LABEL_INVALID
| KS_ERR_ASM_FRAGMENT_INVALID
| KS_ERR_ASM_INVALIDOPERAND
| KS_ERR_ASM_MISSINGFEATURE
| KS_ERR_ASM_MNEMONICFAIL
type ks_opt_type =
| KS_OPT_SYNTAX
type ks_opt_value =
| KS_OPT_SYNTAX_INTEL
| KS_OPT_SYNTAX_ATT
| KS_OPT_SYNTAX_NASM
| KS_OPT_SYNTAX_MASM
| KS_OPT_SYNTAX_GAS
| KS_OPT_SYNTAX_RADIX16
type ks_mode =
| KS_MODE_ARM
| KS_MODE_BIG_ENDIAN
| KS_MODE_LITTLE_ENDIAN
| KS_MODE_THUMB
| KS_MODE_V8
| KS_MODE_MICRO
| KS_MODE_MIPS3
| KS_MODE_MIPS32R6
| KS_MODE_MIPS32
| KS_MODE_MIPS64
| KS_MODE_16
| KS_MODE_32
| KS_MODE_64
| KS_MODE_PPC32
| KS_MODE_PPC64
| KS_MODE_QPX
| KS_MODE_SPARC32
| KS_MODE_SPARC64
| KS_MODE_V9
end
(** Record containing a successful encoding result.
encoding field contains an int array
encoding_size is size of the encoding
stat_count records how many statements were successfully processed.
*)
type encoded_result =
{
encoding: int array;
encoding_size : int;
stat_count : int;
}
(** Determine if the given architecture is supported. True if the
architecture is supported, false otherwise *)
val ks_arch_supported : Types.ks_arch -> bool
val ks_version : int -> int -> int
(** Set an option for a Keystone engine instance.
Takes an engine instance, an option type and an option value.
Returns KS_ERR_OK on success or another value on failure.
*)
val ks_option :
Types.ks_t ->
Types.ks_opt_type -> Types.ks_opt_value -> Types.ks_error
(** Given a ks_err type, returns a string description of the error. *)
val ks_strerror : Types.ks_error -> string
(** Create a new instance of Keystone engine.
arch: is architecture type, mode is hardware mode.
Returns a Keystone engine or a string with an error message.
*)
val ks_open :
Types.ks_arch -> ?endian:Types.ks_mode -> Types.ks_mode -> (Types.ks_t, string) Result.result
(** Close the Keystone engine instance *)
val ks_close : Types.ks_t -> int64
(** Given a Keystone engine instance, returns the last error number on
some API function failure. *)
val ks_errno :
Types.ks_t -> Types.ks_error
(** Assemble a string: takes a Keystone engine instance, a string to
assemble and a start address to assemble from.
On success returns Ok with a encoded_result record
*)
val ks_asm :
Types.ks_t ->
string -> int -> (encoded_result, string) Result.result
(** Convert an array containing an encoding of an assembly string and
returns a string representation. *)
val asm_array_to_string : int array -> string