大家好,我在通过构建模糊测试工具学习Clojure时遇到了一些麻烦,我想要找到一种好的方法来修改字符串输入。背景是,最成功的模糊测试工具使用一些非常基本的技术,比如翻转位和字节。
我知道有翻转位的函数,但它们不能在字符串上正常工作,这是可以理解的。
所以我正在考虑将ASCII转换为二进制,进行转换,然后再转换回ASCII。
例如,如果我翻转“test”的位
01110100 01100101 01110011 01110100 = "test"
11110100 01100101 01110011 01110100 ;翻转第一个位
10110100 01100101 01110011 01110100 ;翻转前两个位
我也想翻转整个字节
01110100 01100101 01110011 01110100 = "test"
10001011 01100101 01110011 01110100 ;翻转字节
我的方法是转换字符串为二进制
(defn encode [s]
"test" -> \"01110100 01100101 01110011 01110100""
(trim (cl-format nil "~{~8,'0b ~}" (map #(int %) s))))
遍历字符串并翻转位,然后将它们转换回。
我已经努力了一整天,但还是找不到一个好的方法,所以我想看看各位专家是否有更优雅的解决方案。
我还想对整数字符串执行此操作,但不知道如何最好地使用(Integer/toBinaryString)函数
例如
(Integer/toBinaryString 87)
=> "1010111"
但是,由于它是一个字符串,所以我不能使用(bit-flip)或相关的库函数。
先谢谢大家了!