论文研究-嵌入式软件内存泄露检测方法研究.pdf

所需积分/C币:10 2019-09-10 19:31:47 453KB .PDF
收藏 收藏
举报

动态内存分配为C/C 语言编程人员提供了极大的灵活性,但同时也带来了一个潜在的严重问题——内存泄露。与桌面系统相比,嵌入式系统处理能力弱、内存空间小、运行时间长,如果在程序运行期间发生内存泄露,将导致系统崩溃,造成不可预料的后果,因此需要在开发调试阶段尽早检测出造成内存泄露的代码。提出了一种基于动态检测技术和程序插装技术的嵌入式软件内存泄露分布式检测方法。该方法的实现思想是当程序在目标机运行时,插装代码自动截获内存操作函数,收集内存操作相关信息并把收集到的信息发送到服务器端处理,实现了嵌入式系统内存泄露的准确检测。实验结果证明,由于采用分布式技术进行信息处理,内存泄露检测效率得到了很大的提升
013,49(14) Computer Engineering and Applications计算机工程与应用 服务器端对信息实时处理,避兔了嵌入式设备对信息进行 源程序 Malloc函数内部指令信息收集函数 处理判断,节省了锨入式设备的宝贵资源,从而提高了代 码执行效率 1保存 malloc第 恢复 malloc第 本方法包括客户端 Client和服务器端 Server client 条指令MA 指令JA 条指令为MA 运行在目标机(嵌入式系统),负责收集数据并将数据发送 再次调用 Malloc 2.修改 malloc第 指令MA 给运行在主机上的 Server, Server接收数据,并进行数据的 条指令为跳转 信总收集 处理,由 Server端报告是否有內存泄露,并给岀详细的信 指令JA 指令B 恢 第 条指令为JA 息。图1为本方法工作流程图(本方法T作流程从第1步 语句A 指令M return 到第7步依次执行) 3. Malloc() 实叉编译好的日加找程序2运行日标文件 语句B 标文件(检测代码 与祓测代吗编译 检测模块收集内 信息发送存操作信息 5接收客户端发送 注: Malloc函数内部指令中的JA和MA指令不共存,调用原 的信息 4.通信模块发送 Malloc时修改为MA,调用修改后的 Malloc时修改为JA.图 6.处理接收到的 信息 中的箭头均表小函数的跳转 7报告内存泄露详 图2 Malloc插桩示意图 细信息 Client端 erver端 3功能验证与性能测试 3.1嵌入式內存泄露动态检测方法功能验证 图1内存泄露检测流程图 为了验证本方法的正确性,本节给出了一个用本方法 21 Server端设计 进行内存泄露检测的测试用例及分析结果。 Server端负责接收 Client端发送来的数据,对数据进行 测试环境如下:凵标机为开发板下的 vxworks系统和 处理:处理流程如下: arm- linux系统服务器端所在环境为 windows Xp操作系统。 (1)如果收到的信息是内存申请函数,则把收集到的 被测代码为电视机顶盒(STB)源代码中 frbuf模块的 信息添加到哈希表当中,否则执行下一步 部分代码,并做了适当修改,添加了自定义内存操作函数, (2)如果收集到的信息是内存释放函数,则查找哈希修改后程序中主函数调用fne3,func3再词用ncl和func2 表,找到释放地址与哈希表中储存的申请地址相同的结点 并且在func中调用了自定义的内存中请函数 myfunc,在 调用过程中执行一些内存操作,被测代码如下 后将该信息块从哈希表中删除。 void func1( char*p (3)待程序运行结束后,遍历哈希表,判断哈希表是否 为空,如果哈希表为空,则程序没有发生内存泄露。如果 Int 哈希表不为空,则发生了内存泄露,然后报告详细的内存 泄露信息。 释放une3中的p1*/ 通过 Server报告出的内存泄露信息,程序员可以很快 free(p); 找到内存泄露的位置。 /*此处发生内存泄露*} 22 Client端设计 point=(int*)malloc( 100); * myfunc为自定义内存申请函数,此处发生内存泄露* Client运行在目标机, Client的工作原理类似于 ownfunc=(int*)myfunc( sizeof( int)) WIDOWS HOOK API的工作原理,通过在被测函数中 插装跳转指令来实现函数的截取,即把第一条指令修收为 跳转指令,当被测函数第一条指令被执行时,将自动跳转 void func2( struct STB*struct) 到信息收集函数,在信息收集函数里通过收集内存操作的 相关信息(中请地址、大小、文件名、行号、调用栈),并扣收 unsigned lung k=0 集到的信息实时发送到服务器端。山于本方法采用指令 跳转实现函数的跳转达到信息收集目的,所以这种方法可 *释放tunc3中的指针p* free(struct) 以很好地支持自定义的內存操作函数,有更好的适应性, 满足不同开发平台的需求。 图2为 Malloc函数插桩示意图(其他函数插桩方式 void func3() 类似 张鹏,杨秋辉,李海怒:嵌入式软件內存泄露检测方法研究 2013,49(14)5 har *pl, p2, "p3 函数的名字,一个信息收集函数对应一个内存操作函数。 struct STB *p; 通过比对,被测代码的内存泄露信息与测试结果完全相 符,并且与前面汪小林和 l!y"提出的两种内存泄 申请一块大小等于结构体大小的内存空间,此处p所指空露检测方法对比后发现本方法可以弥补以上两种方法的 同在func2中释放* 不足,从实验结果中看到本方法可以精确定位,以及对自 p=(struct LesL*)malloc( sizeof( strucT STB)); *此处p1所指空间在 func l中释放*/ 定义内存操作函数很好的支持。 pl=malloc( sizeof( char)) 3.2采用分布式检测与基于目标机检测性能对比 p2-(char *)malloc(4); 为了验证对采用分布式处理方法带来的性能改进,本 对p2所指内存空间大小进行重新分配,此处发内存泄露*实验分别统计分布式处理方式下的执行时间、以及将信息 p3=( char *)realloc( p2, 20): 收集和处理仝部在目标机端完成时的执行时问:内存泄 func2(p) 露检测的方法进行了性能测试,分别移植电视机顶盒 func1(p1) STB)系统源代码到ⅴ xworks、arm-inux开发板,然后修 改移植后代码的内存操作比例,统计测试代码执行时间。 void main()( 通过测试实验结果表明,验证了采用分布式内存泄漏检测 ffunc3() 比完全在只通过目标机端进行内存泄露检测的性能有较 大提升。表1为本方法采用分布式检测技术相比基于目标 被测代码中一共有三处内存泄露。将以上代码从机检测方法在 Vxworks操作系统和 Arm-linux操作系统下 armn-inux操作系统移植到 vxworks操作系统,在两个系统性能提升结果。 下分别进行了测试。图3及图4为测试完成后代码服务器 表1采用分布式检测技术性能提升结果 端显示结果,从结果中可以清晰地看到发生泄漏的文件 名、行号以及调用栈的详细信息,由于内存操作函数都被 代码情况(内存操作 s环境 A 环 替换为信息收集函数,因此调用栈显示的名字是信息收集 次数听占百分比) 时的性能提境时的性能提 (内存操作次数所有 升倍数 升倍数 语句执行次数) 1.76 7.96 (2000/62000) 解Doe影T时!?t! 1.83 8.23 drac pitcl (3000/63000) 国]】 186 8.65 品D/ Fleece wwok oae Tetiesert/teri后 (4500/65000 10.45% 】上 道缺M上}M山起 (700/67000) Eais D WciBetd 3 0 usagi Taliaieit/toal d 2.43% 7.97 E RHEELSED 4.76% him-时-5-)是想3 1.83 (400084000 图3 vxworks检测结果 188 (6200/86200) 909 2.19 8.49 (8000/88000) 了,tt1,tat 4结束语 用比上! 本文实现了一种基于程序插桩技术和动态检测技术 L 的嵌入式钦件分布式内存泄露检測的方法。本方法可以 准确枪测出针对 linux和ⅴ xworks这两个操作系统下嵌入 出图时1m= 式软件运行时的内存泄露,并报告出內存泄露的详细信 e国和门目射动附 息从本文方法测试情况来看,报告出的泄露信息比较明 确,测试结果较准确,对自定义內存操作函数也可以进行 好的监控,并能够避兔内存泄露的误报,该方法在性能 上比单纯在目标机上进行检测的效率也有很大提升。 图4am- - inux检测结果 (下转65页)

...展开详情
试读 4P 论文研究-嵌入式软件内存泄露检测方法研究.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    weixin_38743737 如果觉得有用,不妨留言支持一下
    2019-09-10
    • 至尊王者

      成功上传501个资源即可获取
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    论文研究-嵌入式软件内存泄露检测方法研究.pdf 10积分/C币 立即下载
    1/4
    论文研究-嵌入式软件内存泄露检测方法研究.pdf第1页
    论文研究-嵌入式软件内存泄露检测方法研究.pdf第2页

    试读已结束,剩余2页未读...

    10积分/C币 立即下载 >