一种linux内核模块动态打桩的系统技术方案

技术编号:16979241 阅读:84 留言:0更新日期:2018-01-09 23:43
本发明专利技术提供一种linux内核模块动态打桩的系统,涉及Linux内核开发单元测试技术。本发明专利技术主要由2部分组成:内核重定向模块(1);测试用例控制模块(2),在对某一函数地址进行打桩时,内核重定向模块依据依据打桩原函数地址、打桩函数地址、打桩方式等,生成一个动态重定向框架的控制代码块,该代码块完成打桩函数的调用控制、参数复制、返回值复制等,测试用例控制模块(2)再通过内核重定向模块(1)实现单元测试。解决了内核模块加载运行后较难进行函数打桩替换,导致单元测试、系统调试很困难的情况。

A dynamic pile driving system for Linux kernel module

The invention provides a dynamic pile driving system for the Linux kernel module, which involves the testing technology of the Linux kernel development unit. The invention is mainly composed of 2 parts: kernel redirection module (1); test case control module (2), in a function address piling, redirection module based on the basis of the original kernel function address, piling piling, piling function address and control code block to generate a dynamic framework to redirect the code. A complete piling function call parameters of control, copy, copy, return value, test case control module (2) through the kernel redirection module (1) implementation of unit test. It is difficult for the unit test and system debugging to be difficult to replace the function piling after the kernel module is loaded and run.

【技术实现步骤摘要】
一种linux内核模块动态打桩的系统
本专利技术涉及Linux内核开发单元测试技术,尤其涉及一种linux内核模块动态打桩的系统。
技术介绍
软件开发活动中单元测试是必不可少的,单元测试可以有效地提高软件质量,降低后期软件维护成本,对关键代码进行单元测试也是软件开发项目的基本要求。不同于应用软件开发,目前linux内核驱动开发,由于linux内核系统的高度耦合、复杂以及技术特点,造成对运行的内核模块进行单元测试难度较大。开展单元测试最重要的工作就是对被测函数进行打桩,模拟故障异常场景,内核的技术特点,造成对内核模块进行打桩会有很大的风险和难度。
技术实现思路
为了解决以上问题,本专利技术提出一种linux内核模块动态打桩的系统,该系统提供了一种在内核态对加载运行的内核模块进行函数替换打桩、前打桩、后打桩的有效方法,利用函数打桩内核开发人员就能够对内核驱动完成函数级别的单元测试。本专利技术的技术方案是:一种linux内核模块动态打桩的系统,主要用于linux内核驱动开发过程,解决内核模块加载运行后较难进行函数打桩替换,导致单元测试、系统调试很困难的情况。该系统可用在linux内核驱动开发过程,其通过动态重定向技术对已经加载运行的被测内核模块进行动态打桩、用例执行控制。该系统主要由2部分组成:内核重定向模块(1);测试用例控制模块(2);测试用例控制模块(2)再通过内核重定向模块(1)实现单元测试。在对某一函数地址进行打桩时,内核重定向模块(1)依据打桩原函数地址、打桩函数地址、打桩方式等,生成一个动态重定向框架的控制代码块,该代码块完成打桩函数的调用控制、参数复制、返回值复制等。所述的内核重定向模块(1),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间;内核可以获取代码段进行读写执行权限;通过动态生成重定向机器指令完成函数的跳转。本模块获取利用内核获取某内存页面的写权限,修改目标地址的机器指令为重定向指令区,在重定向指令区实现了被测函数替换打桩、前打桩、后打桩的调用框架,完成函数的打桩替换。所述的测试用例控制模块(2),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间。本模块管理单元测试需要的桩函数,负责加载、卸载桩函数,加载后的桩函数可以被内核重定向模块(1)的调用框架直接使用,完成对被测函数运行环境的直接控制,以实现单元测试的目的。内核重定向模块是一个内核模块,该模块在内核中依据内核模块名称、函数名称完成名称到地址的转换,并管理所有重定向代码控制块。本专利技术的另一个创新点,动态重定向框架,该框架函数依据函数地址动态生成,完成函数多种方式调用重定向,自动完成调用参数、返回值的调用兼容。本专利技术的创新点之一内核模块动态函数打桩,该系统通过修改被测函数代码段,利用函数重定向技术,完成内核函数级别的打桩。附图说明图1是为本专利技术中linux内核模块单元测试示意图。图2是函数打桩框架流程图。具体实施方式下面对本专利技术的内容进行更加详细的阐述:如图1所示,一种linux内核模块动态打桩的系统,主要用于linux内核驱动开发过程,解决内核模块加载运行后较难进行函数打桩替换,导致单元测试、系统调试很困难。该系统可用在linux内核驱动开发过程,其通过动态重定向技术对已经加载运行的被测内核模块进行动态打桩、用例执行控制。该系统主要由2部分组成:内核重定向模块(1);测试用例控制模块(2)。所述的内核重定向模块(1),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间;内核可以获取代码段进行读写执行权限;通过动态生成重定向机器指令完成函数的跳转。本模块获取利用内核获取某内存页面的写权限,修改目标地址的机器指令为重定向指令区,在重定向指令区实现了被测函数替换打桩、前打桩、后打桩的调用框架,完成函数的打桩替换。所述的测试用例控制模块(2),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间。本模块管理单元测试需要的桩函数,负责加载、卸载桩函数,加载后的桩函数可以被模块(1)的调用框架直接使用,完成对被测函数运行环境的直接控制,以实现单元测试的目的。如图2所示,该系统主要在软件层面实现,具体流程如下:(1)在内核中找到函数地址,将函数名称转换为函数地址;(2)获取函数地址所在页面的写权限;(3)依据重定向框架生成重定向代码块,将原函数直接重定向到该代码块;(4)运行被测试函数。以上就是内核模块动态打桩的整体实现流程。本文档来自技高网...
一种linux内核模块动态打桩的系统

【技术保护点】
一种linux内核模块动态打桩的系统,其特征在于,主要由2部分组成:内核重定向模块(1);测试用例控制模块(2),在对某一函数地址进行打桩时,内核重定向模块(1)依据打桩原函数地址、打桩函数地址、打桩方式,生成一个动态重定向框架的控制代码块,该代码块完成打桩函数的调用控制、参数复制、返回值复制,测试用例控制模块(2)再通过内核重定向模块(1)实现单元测试;所述的内核重定向模块(1),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间;内核可以获取代码段进行读写执行权限;通过动态生成重定向机器指令完成函数的跳转。

【技术特征摘要】
1.一种linux内核模块动态打桩的系统,其特征在于,主要由2部分组成:内核重定向模块(1);测试用例控制模块(2),在对某一函数地址进行打桩时,内核重定向模块(1)依据打桩原函数地址、打桩函数地址、打桩方式,生成一个动态重定向框架的控制代码块,该代码块完成打桩函数的调用控制、参数复制、返回值复制,测试用例控制模块(2)再通过内核重定向模块(1)实现单元测试;所述的内核重定向模块(1),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间;内核可以获取代码段进...

【专利技术属性】
技术研发人员:李雪生张延良
申请(专利权)人:浪潮电子信息产业股份有限公司
类型:发明
国别省市:山东,37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1