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
167 lines
4.2 KiB
3 years ago
|
(** 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
|