From 6dc1dd5ae074ff584027d6a118a46e7eb200fcc3 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Quynh Date: Sat, 27 Sep 2014 00:40:34 +0800 Subject: [PATCH] ocaml: remove fields regs_read_count, regs_write_count, groups_count, as they can be derived from the lengths of related arrays --- bindings/ocaml/capstone.ml | 13 +++---------- bindings/ocaml/ocaml.c | 25 +++++++++++-------------- bindings/ocaml/test_xcore.ml | 1 - 3 files changed, 14 insertions(+), 25 deletions(-) diff --git a/bindings/ocaml/capstone.ml b/bindings/ocaml/capstone.ml index 89d86ff5..e36abb66 100644 --- a/bindings/ocaml/capstone.ml +++ b/bindings/ocaml/capstone.ml @@ -74,11 +74,8 @@ type cs_insn0 = { mnemonic: string; op_str: string; regs_read: int array; - regs_read_count: int; regs_write: int array; - regs_write_count: int; groups: int array; - groups_count: int; arch: cs_arch; } @@ -92,11 +89,10 @@ external cs_version: unit -> int = "ocaml_version" class cs_insn c a = let csh = c in - let (id, address, size, bytes, mnemonic, op_str, regs_read, regs_read_count, - regs_write, regs_write_count, groups, groups_count, arch) = + let (id, address, size, bytes, mnemonic, op_str, regs_read, + regs_write, groups, arch) = (a.id, a.address, a.size, a.bytes, a.mnemonic, a.op_str, - a.regs_read, a.regs_read_count, a.regs_write, a.regs_write_count, - a.groups, a.groups_count, a.arch) in + a.regs_read, a.regs_write, a.groups, a.arch) in object method id = id; method address = address; @@ -105,11 +101,8 @@ class cs_insn c a = method mnemonic = mnemonic; method op_str = op_str; method regs_read = regs_read; - method regs_read_count = regs_read_count; method regs_write = regs_write; - method regs_write_count = regs_write_count; method groups = groups; - method groups_count = groups_count; method arch = arch; method insn_name = cs_insn_name csh id; end;; diff --git a/bindings/ocaml/ocaml.c b/bindings/ocaml/ocaml.c index 174fced0..57725c66 100644 --- a/bindings/ocaml/ocaml.c +++ b/bindings/ocaml/ocaml.c @@ -43,7 +43,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t unsigned int lcount, i; cons = caml_alloc(2, 0); - rec_insn = caml_alloc(13, 0); + rec_insn = caml_alloc(10, 0); Store_field(rec_insn, 0, Val_int(insn[j-1].id)); Store_field(rec_insn, 1, Val_int(insn[j-1].address)); Store_field(rec_insn, 2, Val_int(insn[j-1].size)); @@ -72,7 +72,6 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t } else array = Atom(0); // empty list Store_field(rec_insn, 6, array); - Store_field(rec_insn, 7, Val_int(lcount)); lcount = (insn[j-1]).detail->regs_write_count; if (lcount) { @@ -82,8 +81,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t } } else array = Atom(0); // empty list - Store_field(rec_insn, 8, array); - Store_field(rec_insn, 9, Val_int(lcount)); + Store_field(rec_insn, 7, array); lcount = (insn[j-1]).detail->groups_count; @@ -94,8 +92,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t } } else array = Atom(0); // empty list - Store_field(rec_insn, 10, array); - Store_field(rec_insn, 11, Val_int(lcount)); + Store_field(rec_insn, 8, array); if(insn[j-1].detail) { switch(arch) { @@ -170,7 +167,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; case CS_ARCH_ARM64: @@ -258,7 +255,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; case CS_ARCH_MIPS: @@ -300,7 +297,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; case CS_ARCH_X86: @@ -396,7 +393,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; case CS_ARCH_PPC: @@ -442,7 +439,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; @@ -489,7 +486,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; @@ -540,7 +537,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; @@ -585,7 +582,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t // finally, insert this into arch_info Store_field(arch_info, 0, op_info_val); - Store_field(rec_insn, 12, arch_info); + Store_field(rec_insn, 9, arch_info); break; diff --git a/bindings/ocaml/test_xcore.ml b/bindings/ocaml/test_xcore.ml index a62e3780..89b53e2f 100644 --- a/bindings/ocaml/test_xcore.ml +++ b/bindings/ocaml/test_xcore.ml @@ -51,7 +51,6 @@ let print_detail csh arch = | CS_INFO_SYSZ _ -> (); | CS_INFO_XCORE xcore -> ( - printf "\top_count: %d\n" (Array.length xcore.operands); (* print all operands info (type & value) *) if (Array.length xcore.operands) > 0 then ( printf "\top_count: %d\n" (Array.length xcore.operands);