TinyOS论文10:Bug Hunting in Sensor Network Applications

与safety TinyOS有关;

  1. 论文提出了KleeNet工具,一个独立平台的传感网程序bug检测工具,他能对所有可能的输入来测试应用程序,主要监测的是传感网程序内存安全的bug;
  2. KeelNet识别某个bug之后会生成一个触发这个bug的测试用例;
    将KeelNet集成到了TinyOS中;
  3. KleeNet的基本原理(与Avrora中-monitor插桩程序的实现有点类似):指定一个变量作为跟踪对象,获得该变量执行的路径和操作,如果产生了bug,再生成一个导致这个bug的测试用例。
  4. 将KeelNet集成到了TinyOS中。

Abstract

  1. 论文提出了KleeNet工具,一个独立平台的传感网程序bug检测工具,他能对所有可能的输入来测试应用程序,主要监测的是传感网程序内存安全的bug;
  2. KeelNet识别某个bug之后会生成一个触发这个bug的测试用例;
  3. 将KeelNet集成到了TinyOS中;

Introduce

  1. WSNs应用程序:内存限制 + CPU资源有限 + 低级、非类型安全的语言且没有动态监测和内存保护 + 高度地面向数据流 + 导读分布特特点 + 缺乏内存保护;
  2. WSNs的常见bug有:数组内存越界 + 空指针异常 + 错误的类型转换(特别是指针与结构体之间的转换)
  3. 现有的对C语言的测试工具不适用于测试WSNs应用程序的原因是:
    1、WSNs程序与操作系统集成在一起运行,人工的代码修改很耗时;
    2、很多工具有限地支持C语言语义的静态代码分析,而WSNs程序主要是从周围环境获得数据,所以这些工具不能检测动态运行时的bug;
    3、现有bug 测试对开发人员来讲很难使用;
  4. 论文主要是找出确定的WSNs错误,且自动化,开销小。
  1. WSNs的内存安全上的相关工作有:Safe TinyOS;
  2. Safe TinyOS在编译时冬天内存检测来捕获非安全的指针和数组操作,当然也会增加代码量和CPU的额外开销 + 软件部署之后进行相关测试;
  3. KleeNet使用动态的代码植入技术来进行离线的bug检测,这样不用耗费任何系统资源 + 通过检测所有可能的程序输入来保证内存安全;
  4. KleeNet解释虚拟指令集为KleeNet的核心引擎,因此它不能检测依赖硬件平台的汇编级bug,也不适用于运行时的内存安全的检测
  5. 论文贡献:
    1、将KleeNet继承到TinyOS检测WSNs程序bug;
    2、容易扩展;
    3、开销小;

System overview

1、Klee

  1. Klee是一个C程序的符号执行工具,Klee以符号作为输入。开发人员只需要指定代码中哪一个内存位置是有输入的;代码执行过程中,所有的符号变量的执行路径和操作会被跟踪;如果找到一个bug,Klee会自动生成一个导致这个bug的测试用例。例如:
. . .
call Timer1. startPeriodic (500);
. . .
int a[10];
unsigned i ;
klee make symbolic name(&i , sizeof( i ) , ”i ”);
event void Timer1. fired ()
{
call Leds. led1Toggle ();
// here we violate memory safety
// on the 11th signal of this event
if ( i < 11)
a[ i++] = 1;
}
. . .

Klee的输出:

$ make kleenet test
KLEE: ERROR: memory error : out of bound pointer
$ make kleenet display
BlinkFailC$i :10
  1. 目前Klee只支持内存引用错误和除0错误,之后会被扩展成支持非类型安全错误例如指针转化错误;

2、Automatic code instrumentation

  1. 论文的一个目标是:提供一个很容易使用的WSNs程序bug检测工具,并且能很好地继承到WSNs成虚执行的生命周期中。实现方法是:自动的代码植入。
  2. 自动代码植入的实现方法:通过扩展基于GNU C语言编译器的解析器工具ANTLR,使他能自动插入符号注解(例如标记内存位置),用户只需要提供一个待检测变量高级配置。
  3. 也可以插入注解的配置方式来进行额外的检测,这种方式是可选的。

3、结构体类型检测

  1. 结构体类型与指针类型之间的转换很有可能出错。
  2. 一开始传感器结点接收到的数据时位流数据,之后指向改数据的指针会转换成特定的结构体类型

Integeration into TinyOS

  1. 通过网TinyOS平台中增添一个虚拟的KleeNet平台,这个方法很容易实现网平台中增加不同模块,能够自动将传感网结点的输入值和接收的数据报标记为符号。
  2. TinyOS是基于事件驱动,为了覆盖所有的程序控制流路径,将我们的平台扩展成自动事件信号量机制,一旦程序启动,所有实现了的事件都信号化然后执行。
  3. 如图显示了KleeNet构建过程:
    1、指定配置文件:代码中哪个变量要符号化(klee_make_symbolic函数一斤更实现了);
    2、所有接收到的数据报缓存自动符号化;
    3、植入的代码传入Klee中,并且构建C对象文件
    4、最后Klee解释这个C对象文件,有bug的话会自动生成产生这个bug的测试用例
    这里写图片描述

Evaluation

  1. 除0bug
  2. KleeNet的优点:可用性 + 覆盖率高 + 集成到了TinyOS + 有效性。

Conclusion

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值