我已经写了一个类似于 printf 的函数在运行中,我想对其进行模糊测试以检查错误。afl-fuzz 给了我一个输入文件,但我正在努力想办法把它变成可变参数输入。
有什么方法可以动态构造 va_list 或以其他方式动态构造参数列表?
我已经写了一个类似于 printf 的函数在运行中,我想对其进行模糊测试以检查错误。afl-fuzz 给了我一个输入文件,但我正在努力想办法把它变成可变参数输入。
有什么方法可以动态构造 va_list 或以其他方式动态构造参数列表?
dyncall似乎是为了做你想做的事而写的,尽管我没有亲自使用它。
另一种方法是生成源代码,使用大量输入调用相关函数。它不那么优雅,但它应该很容易编程。
libffi 可用于将参数组装到可变参数函数并调用它们。
具体ffi_prep_cif_var
需要用到的函数:https ://github.com/libffi/libffi/blob/master/doc/libffi.texi#L152-L153