<PRIVATE
+: buf/len/start ( from to -- buf len from )
+ [ drop <alien> ] [ swap - ] [ drop ] 2tri ;
+
: make-insn ( cs_insn -- seq )
{
[ address>> ]
- [ [ bytes>> ] [ size>> ] bi head bytes>hex-string ]
+ [ [ bytes>> ] [ size>> ] bi head-slice bytes>hex-string ]
[ mnemonic>> alien>native-string ]
[ op_str>> alien>native-string " " glue ]
} cleave 3array ;
SINGLETON: capstone-disassembler
M: capstone-disassembler disassemble*
- [ [ <alien> ] keep ] dip over [ - ] dip
- [ make-disassembly write-disassembly ] with-code-blocks ;
+ [ buf/len/start make-disassembly write-disassembly ] with-code-blocks ;
capstone-disassembler disassembler-backend set-global
: buf/len ( from to -- buf len ) [ drop <alien> ] [ swap - ] 2bi ;
-: write-disassembly ( lines -- )
- dup [ second length ] [ max ] map-reduce [
- '[
- [ first >hex cell 2 * CHAR: 0 pad-head % ": " % ]
- [ second _ CHAR: \s pad-tail % " " % ]
- [ third [ % ] [ resolve-call ] bi ]
- tri CHAR: \n ,
- ] each
- ] "" make write ;
-
: make-disassembly ( ud -- lines )
[
[ dup ud_disassemble 0 = ] [