您的位置:首页 > 移动开发

TinyOS论文10:Bug Hunting in Sensor Network Applications

2015-12-15 16:56 381 查看
与safety TinyOS有关;

论文提出了KleeNet工具,一个独立平台的传感网程序bug检测工具,他能对所有可能的输入来测试应用程序,主要监测的是传感网程序内存安全的bug;

KeelNet识别某个bug之后会生成一个触发这个bug的测试用例;

将KeelNet集成到了TinyOS中;

KleeNet的基本原理(与Avrora中-monitor插桩程序的实现有点类似):指定一个变量作为跟踪对象,获得该变量执行的路径和操作,如果产生了bug,再生成一个导致这个bug的测试用例。

将KeelNet集成到了TinyOS中。

Abstract

论文提出了KleeNet工具,一个独立平台的传感网程序bug检测工具,他能对所有可能的输入来测试应用程序,主要监测的是传感网程序内存安全的bug;

KeelNet识别某个bug之后会生成一个触发这个bug的测试用例;

将KeelNet集成到了TinyOS中;

Introduce

WSNs应用程序:内存限制 + CPU资源有限 + 低级、非类型安全的语言且没有动态监测和内存保护 + 高度地面向数据流 + 导读分布特特点 + 缺乏内存保护;

WSNs的常见bug有:数组内存越界 + 空指针异常 + 错误的类型转换(特别是指针与结构体之间的转换)

现有的对C语言的测试工具不适用于测试WSNs应用程序的原因是:

1、WSNs程序与操作系统集成在一起运行,人工的代码修改很耗时;

2、很多工具有限地支持C语言语义的静态代码分析,而WSNs程序主要是从周围环境获得数据,所以这些工具不能检测动态运行时的bug;

3、现有bug 测试对开发人员来讲很难使用;

论文主要是找出确定的WSNs错误,且自动化,开销小。

Related work

WSNs的内存安全上的相关工作有:Safe TinyOS;

Safe TinyOS在编译时冬天内存检测来捕获非安全的指针和数组操作,当然也会增加代码量和CPU的额外开销 + 软件部署之后进行相关测试;

KleeNet使用动态的代码植入技术来进行离线的bug检测,这样不用耗费任何系统资源 + 通过检测所有可能的程序输入来保证内存安全;

KleeNet解释虚拟指令集为KleeNet的核心引擎,因此它不能检测依赖硬件平台的汇编级bug,也不适用于运行时的内存安全的检测

论文贡献:

1、将KleeNet继承到TinyOS检测WSNs程序bug;

2、容易扩展;

3、开销小;

System overview

1、Klee

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 ’


目前Klee只支持内存引用错误和除0错误,之后会被扩展成支持非类型安全错误例如指针转化错误;

2、Automatic code instrumentation

论文的一个目标是:提供一个很容易使用的WSNs程序bug检测工具,并且能很好地继承到WSNs成虚执行的生命周期中。实现方法是:自动的代码植入。

自动代码植入的实现方法:通过扩展基于GNU C语言编译器的解析器工具ANTLR,使他能自动插入符号注解(例如标记内存位置),用户只需要提供一个待检测变量高级配置。

也可以插入注解的配置方式来进行额外的检测,这种方式是可选的。

3、结构体类型检测

结构体类型与指针类型之间的转换很有可能出错。

一开始传感器结点接收到的数据时位流数据,之后指向改数据的指针会转换成特定的结构体类型

Integeration into TinyOS

通过网TinyOS平台中增添一个虚拟的KleeNet平台,这个方法很容易实现网平台中增加不同模块,能够自动将传感网结点的输入值和接收的数据报标记为符号。

TinyOS是基于事件驱动,为了覆盖所有的程序控制流路径,将我们的平台扩展成自动事件信号量机制,一旦程序启动,所有实现了的事件都信号化然后执行。

如图显示了KleeNet构建过程:

1、指定配置文件:代码中哪个变量要符号化(klee_make_symbolic函数一斤更实现了);

2、所有接收到的数据报缓存自动符号化;

3、植入的代码传入Klee中,并且构建C对象文件

4、最后Klee解释这个C对象文件,有bug的话会自动生成产生这个bug的测试用例



Evaluation

除0bug

KleeNet的优点:可用性 + 覆盖率高 + 集成到了TinyOS + 有效性。

Conclusion

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: