16.2 动态测试技术

16.2.1 SPIKE 简介

  • spike的示例代码: ```c

    include

    include

    include

    include “spike.h”

main() { int i,k; //设置的两个变量,向其中逐个加入畸形数据 struct spike * p_spike = new_spike(); setspike(p_spike); spike_clear();

  1. //s_init_fuzzing();//使用SPIKE自带畸形数据库
  2. s_add_fuzzstring("fuzz1111");//添加自定义的畸形数据
  3. s_add_fuzzstring("fuzz2222");//添加自定义的畸形数据
  4. //s_add_fuzzstring("failwest3");//添加自定义的畸形数据
  5. //s_add_fuzzstring("failwest4");//添加自定义的畸形数据
  6. s_resetfuzzvariable();
  7. for (k = 0; k < 2; k++) {
  8. for (i = 0; i < s_get_max_fuzzstring(); i++) {
  9. spike_clear();
  10. s_incrementfuzzstring();
  11. s_string("aaaaaaaa");
  12. s_string_variable("");
  13. s_string("bbbbbbbb");
  14. s_string_variable("");
  15. s_string("cccccccc");
  16. s_print_buffer();
  17. }
  18. s_incrementfuzzvariable();
  19. }
  20. spike_free(p_spike);

} ```

  • 函数的功能:
    • s_string()函数用于以字符串形式向 SPIKE 结构体的缓冲区添加数据。
    • s_init_fuzzing()函数表明使用 SPIKE 自带的畸形数据集合。
    • s_add_fuzzstring()函数允许用户添加自定义的畸形数据。
    • spike_clear()清空 SPIKE 的缓存。
    • s_incrementfuzzstring()表示使用下一个畸形数据。
    • s_incrementfuzzvariable()表示移向下一个变量的位置进行 fuzz。
    • s_print_buffer()函数用于以十六进制形式输出当前缓冲区的数据。
  • 上面代码测试的原理如下所示:

image.png