CN104915292B - 一种linux内核模块动态打桩的系统 - Google Patents
一种linux内核模块动态打桩的系统 Download PDFInfo
- Publication number
- CN104915292B CN104915292B CN201510322979.9A CN201510322979A CN104915292B CN 104915292 B CN104915292 B CN 104915292B CN 201510322979 A CN201510322979 A CN 201510322979A CN 104915292 B CN104915292 B CN 104915292B
- Authority
- CN
- China
- Prior art keywords
- kernel
- function
- piling
- module
- redirection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000011161 development Methods 0.000 title abstract description 8
- 230000018109 developmental process Effects 0.000 title 1
- 238000012360 testing method Methods 0.000 claims abstract description 28
- 230000006870 function Effects 0.000 claims description 49
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000000034 method Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000465 moulding Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种linux内核模块动态打桩的系统,涉及Linux内核开发单元测试技术。本发明主要由2部分组成:内核重定向模块(1);测试用例控制模块(2),在对某一函数地址进行打桩时,内核重定向模块依据依据打桩原函数地址、打桩函数地址、打桩方式等,生成一个动态重定向框架的控制代码块,该代码块完成打桩函数的调用控制、参数复制、返回值复制等,测试用例控制模块(2)再通过内核重定向模块(1)实现单元测试。解决了内核模块加载运行后较难进行函数打桩替换,导致单元测试、系统调试很困难的情况。
Description
技术领域
本发明涉及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)运行被测试函数。
以上就是内核模块动态打桩的整体实现流程。
Claims (3)
1.一种linux内核模块动态打桩的系统,其特征在于,主要由2部分组成:内核重定向模块(1);测试用例控制模块(2),
在对某一函数地址进行打桩时,内核重定向模块(1)依据打桩原函数地址、打桩函数地址、打桩方式,生成一个动态重定向框架的控制代码块,该代码块完成打桩函数的调用控制、参数复制、返回值复制,测试用例控制模块(2)再通过内核重定向模块(1)实现单元测试;所述的内核重定向模块(1),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间;内核可以获取代码段进行读写执行权限;通过动态生成重定向机器指令完成函数的跳转。
2.根据权利要求1所述的系统,其特征在于,内核重定向模块(1)获取利用内核获取某内存页面的写权限,修改目标地址的机器指令为重定向指令区,在重定向指令区实现了被测函数替换打桩、前打桩、后打桩的调用框架,完成函数的打桩替换。
3.根据权利要求2所述的系统,其特征在于,测试用例控制模块(2)管理单元测试需要的桩函数,负责加载、卸载桩函数,加载后的桩函数可以被内核重定向模块(1)的调用框架直接使用,完成对被测函数运行环境的直接控制。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510322979.9A CN104915292B (zh) | 2015-06-12 | 2015-06-12 | 一种linux内核模块动态打桩的系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510322979.9A CN104915292B (zh) | 2015-06-12 | 2015-06-12 | 一种linux内核模块动态打桩的系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104915292A CN104915292A (zh) | 2015-09-16 |
CN104915292B true CN104915292B (zh) | 2018-01-09 |
Family
ID=54084370
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510322979.9A Active CN104915292B (zh) | 2015-06-12 | 2015-06-12 | 一种linux内核模块动态打桩的系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104915292B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105468525A (zh) * | 2015-11-27 | 2016-04-06 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口单元测试方法 |
CN105528292A (zh) * | 2015-12-07 | 2016-04-27 | 浪潮(北京)电子信息产业有限公司 | 一种基于内核模块的内核单元测试方法及系统 |
CN112181851B (zh) * | 2020-10-27 | 2023-07-28 | 北京字跳网络技术有限公司 | 软件测试方法、设备及存储介质 |
CN117076338B (zh) * | 2023-10-18 | 2024-01-30 | 麒麟软件有限公司 | 基于kprobe的linux内核动态调试方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN101847117A (zh) * | 2009-03-23 | 2010-09-29 | 中兴通讯股份有限公司 | 一种单元测试方法和装置 |
CN103106132A (zh) * | 2013-03-05 | 2013-05-15 | 中标软件有限公司 | Linux系统崩溃时内核函数调用栈分析调试方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030056197A1 (en) * | 2001-08-30 | 2003-03-20 | Dennis Peter D. J. | Method and apparatus to facilitate debugging computer code within an operating system kernel |
-
2015
- 2015-06-12 CN CN201510322979.9A patent/CN104915292B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN101847117A (zh) * | 2009-03-23 | 2010-09-29 | 中兴通讯股份有限公司 | 一种单元测试方法和装置 |
CN103106132A (zh) * | 2013-03-05 | 2013-05-15 | 中标软件有限公司 | Linux系统崩溃时内核函数调用栈分析调试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104915292A (zh) | 2015-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104915292B (zh) | 一种linux内核模块动态打桩的系统 | |
CN112417578B (zh) | 一种基于Dynamo和Excel进行预制桩建模模型的方法及系统 | |
CN103309904B (zh) | 一种生成数据仓库etl 代码的方法及装置 | |
CN104156224B (zh) | 一种软件构建持续集成方法及系统 | |
CN101482817B (zh) | 基于黑盒的大粒度Java构件组装方法 | |
CN101739334A (zh) | 嵌入式软件自动化测试方法 | |
CN1767453A (zh) | 自动测试方法和系统 | |
CN102650966A (zh) | 一种面向复用的嵌入式软件测试方法及其测试系统 | |
CN103577308B (zh) | 移动设备的日志文件的获取方法 | |
CN112988153A (zh) | 基于微前端的数据处理方法及框架 | |
CN103365668B (zh) | 一种动态链接库装载和链接的方法、装置 | |
CN109318225A (zh) | 用于控制码垛机器人的方法、装置及系统 | |
CN104750603A (zh) | 一种多核dsp软件仿真器及其物理层软件测试方法 | |
CN102306122A (zh) | 自动化测试方法及设备 | |
CN106326093A (zh) | 自动化测试系统及测试方法 | |
CN104750475B (zh) | 一种卫星在轨重构框架系统和方法 | |
Stuckey et al. | The G12 project: Mapping solver independent models to efficient solutions | |
CN102810184A (zh) | 一种动态执行工作流的方法、装置及企业系统 | |
CN1874603A (zh) | 跨平台信息交换方法及系统 | |
CN102486749A (zh) | 数据驱动测试方法及系统 | |
CN103513966A (zh) | 基于组件的php开发框架 | |
CN105989213A (zh) | 一种通信工程图纸生成方法及图纸设计客户端 | |
CN102222001A (zh) | 环境部署装置和环境部署方法 | |
CN110096445A (zh) | 一种模型在环测试方法及装置 | |
Vasilev et al. | A software stack for specification and robotic execution of protocols for synthetic biological engineering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |