CN104915292B - 一种linux内核模块动态打桩的系统 - Google Patents

一种linux内核模块动态打桩的系统 Download PDF

Info

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
Application number
CN201510322979.9A
Other languages
English (en)
Other versions
CN104915292A (zh
Inventor
李雪生
张延良
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Inspur Electronic Information Industry Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Electronic Information Industry Co Ltd filed Critical Inspur Electronic Information Industry Co Ltd
Priority to CN201510322979.9A priority Critical patent/CN104915292B/zh
Publication of CN104915292A publication Critical patent/CN104915292A/zh
Application granted granted Critical
Publication of CN104915292B publication Critical patent/CN104915292B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种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)运行被测试函数。
以上就是内核模块动态打桩的整体实现流程。

Claims (3)

1.一种linux内核模块动态打桩的系统,其特征在于,主要由2部分组成:内核重定向模块(1);测试用例控制模块(2),
在对某一函数地址进行打桩时,内核重定向模块(1)依据打桩原函数地址、打桩函数地址、打桩方式,生成一个动态重定向框架的控制代码块,该代码块完成打桩函数的调用控制、参数复制、返回值复制,测试用例控制模块(2)再通过内核重定向模块(1)实现单元测试;所述的内核重定向模块(1),Linux内核驱动加载运行后,所有内核模块共享系统内核符号表及地址空间;内核可以获取代码段进行读写执行权限;通过动态生成重定向机器指令完成函数的跳转。
2.根据权利要求1所述的系统,其特征在于,内核重定向模块(1)获取利用内核获取某内存页面的写权限,修改目标地址的机器指令为重定向指令区,在重定向指令区实现了被测函数替换打桩、前打桩、后打桩的调用框架,完成函数的打桩替换。
3.根据权利要求2所述的系统,其特征在于,测试用例控制模块(2)管理单元测试需要的桩函数,负责加载、卸载桩函数,加载后的桩函数可以被内核重定向模块(1)的调用框架直接使用,完成对被测函数运行环境的直接控制。
CN201510322979.9A 2015-06-12 2015-06-12 一种linux内核模块动态打桩的系统 Active CN104915292B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
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