]> gitweb.factorcode.org Git - factor.git/commitdiff
tools.disassembler.capstone: work with capstone 4 and 5 both
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 19 Sep 2023 03:34:01 +0000 (20:34 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 19 Sep 2023 03:34:01 +0000 (20:34 -0700)
basis/tools/disassembler/capstone/capstone.factor

index de4b4aeb10dad19d73fb37815c1140c39ff38bf2..5b9aad33502171c3aa4114933e34770c0b2b0f54 100644 (file)
@@ -70,7 +70,7 @@ ENUM: cs_mode
     { CS_MODE_M680X_HCS08 0x400 }
 ;
 
-STRUCT: cs_insn
+STRUCT: cs_insn_4
     { id uint }
     { address uint64_t }
     { size uint16_t }
@@ -80,6 +80,16 @@ STRUCT: cs_insn
     { detail void* }
 ;
 
+STRUCT: cs_insn_5
+    { id uint }
+    { address uint64_t }
+    { size uint16_t }
+    { bytes uint8_t[24] }
+    { mnemonic char[32] }
+    { op_str char[160] }
+    { detail void* }
+;
+
 ENUM: cs_err
     CS_ERR_OK
     CS_ERR_MEM
@@ -104,10 +114,10 @@ FUNCTION: cs_err cs_open ( cs_arch arch, cs_mode mode, csh* handle )
 FUNCTION: cs_err cs_close ( csh* handle )
 FUNCTION: cs_err cs_errno ( csh handle )
 FUNCTION: c-string cs_strerror ( cs_err code )
-FUNCTION: size_t cs_disasm ( csh handle, uint8_t* code, size_t code_size, uint64_t address, size_t count, cs_insn** insn )
-FUNCTION: size_t cs_disasm_iter ( csh handle, uint8_t** code, size_t* size, uint64_t* address, size_t count, cs_insn* insn )
-FUNCTION: cs_insn* cs_malloc ( csh handle )
-FUNCTION: void cs_free ( cs_insn* insn, size_t count )
+FUNCTION: size_t cs_disasm ( csh handle, uint8_t* code, size_t code_size, uint64_t address, size_t count, void** insn )
+FUNCTION: size_t cs_disasm_iter ( csh handle, uint8_t** code, size_t* size, uint64_t* address, size_t count, void* insn )
+FUNCTION: void* cs_malloc ( csh handle )
+FUNCTION: void cs_free ( void* insn, size_t count )
 FUNCTION: c-string cs_reg_name ( csh handle, uint reg_id )
 FUNCTION: c-string cs_insn_name ( csh handle, uint insn_id )
 FUNCTION: c-string cs_group_name ( csh handle, uint group_id )
@@ -128,10 +138,17 @@ DESTRUCTOR: cs_close
 : with-csh ( ..a quot: ( ..a csh -- ..b ) -- ..b )
     '[ <csh> &cs_close @ ] with-destructors ; inline
 
-SPECIALIZED-ARRAY: cs_insn
-
 <PRIVATE
 
+SPECIALIZED-ARRAY: cs_insn_4
+SPECIALIZED-ARRAY: cs_insn_5
+
+: <direct-cs_insn-array> ( alien len -- specialized-array )
+    cs-version drop {
+        { 4 [ <direct-cs_insn_4-array> ] }
+        { 5 [ <direct-cs_insn_5-array> ] }
+    } case ;
+
 : buf/len/start ( from to -- buf len from )
     [ drop <alien> ] [ swap - ] [ drop ] 2tri ;