(bind-func xtm_asm_dump
(lambda (fname bytes)
(let ((ud_obj:ud* (alloc (* 1024 100)))
(loop #t)
(offset 0)
(f2 (llvm_get_function_ptr fname))
(f (ptrtoi64 f2)))
; (f (i64toptr (- (ptrtoi64 f2) 24))))
(printf "\n%s (%p)\n------\n" fname f)
(if (not (null? f))
(begin
(set! loop #t)
(ud_init ud_obj)
(ud_set_input_buffer ud_obj f bytes)
(ud_set_mode ud_obj 64)
;; (ud_set_pc ud_obj 0)
(ud_set_syntax ud_obj (cast ud_translate_att i8*))
(while (and loop (> (ud_disassemble ud_obj) 0))
(if (or (= (strcmp (ud_lookup_mnemonic (ud_insn_mnemonic ud_obj)) "ret") 0)
(= (strcmp (ud_lookup_mnemonic (ud_insn_mnemonic ud_obj)) "int") 0))
(set! loop #f))
(printf "0x%08llX:\t\t%s\n" (+ (ptrtoi64 f) offset) (ud_insn_asm ud_obj))
(set! offset (+ offset (i32toi64 (ud_insn_len ud_obj)))))))
; (set! offset (ud_insn_off ud_obj)))))
(println "------")
void)))