大家好,我正在通过构建fuzzer学习clojure,但我在寻找一种好的解决方案来修改字符串输入时遇到了一些麻烦。简短介绍一下,最成功的fuzzer使用非常基础的技巧来翻转位和字节。
我知道有位反转函数,但它们对字符串似乎不起作用,这是可以理解的。
因此,我正在考虑将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) 或相关库函数。
提前感谢所有人!