[发明专利]一种用于Linux系统测试代码注入的方法有效
申请号: | 201010538375.5 | 申请日: | 2010-11-10 |
公开(公告)号: | CN101984409A | 公开(公告)日: | 2011-03-09 |
发明(设计)人: | 李忠安;李兴建 | 申请(专利权)人: | 南京南瑞继保电气有限公司;南京南瑞继保工程技术有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 南京天翼专利代理有限责任公司 32112 | 代理人: | 陈建和 |
地址: | 211102 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 用于 linux 系统 测试 代码 注入 方法 | ||
技术领域
本发明涉及用于Linux操作系统的测试代码注入的方法和使用该方法的软件工具。
背景技术
代码注入是指向目标程序对应的本地进程(目标进程)的地址空间注入一段可执行代码,并使进程执行这段代码,用来实现某些特殊的功能。
在Linux开发过程中,为对目标程序进行测试,经常需要在目标进程的地址空间内注入某些测试代码,用于搜集信息或其他测试目的。
在Linux系统中,每个进程都有自己的私有内存空间,互相隔离,彼此不能越界操作。把代码注入不同的进程地址空间,然后在该进程的上下文中执行注入的代码,就必须跨越进程间访问内存执行代码。代码注入技术作为病毒、木马已经存在多年,特别是在Windows系统中:为躲避系统的监控,一些木马病毒在攻击系统时往往将自身作为一个线程运行于其他应用程序的地址空间内,并监视、窃取甚至修改用户进程内的数据。这些技术也可用于软件测试领域,因为测试工具也往往需要对待测程序进行监控、获取进程数据。
目前测试代码注入方法一般有两类。第一类为直接修改目标程序的源代码即源代码插桩,由于必须拥有源代码,其局限性显而易见。例如《舰船电子工程》24卷6期《基于源代码插桩的C程序内存使用错误动态检测》、《计算机工程》36卷4期《飞行控制软件测试中插桩技术的优化方法》、专利号CN200710123818.2的《一种嵌入式系统测试方法》 及专利号CN200910054325.7的《使用监控线程对二进制翻译程序执行流程动态监控的方法》等均采用了源代码插桩方法。另一类为在目标程序运行前对目标程序二进制代码进行修改。这对于某些运行时间超长,且无法中断的程序就无能为力了。病毒传播大部分采用此方法。
下面就此文用到的一些名词进行解释。
系统调用程序是Unix/Linux操作系统向用户程序提供支持的接口,通过这些接口应用程序向操作系统请求服务,控制转向操作系统,而操作系统在完成服务后,将控制和结果返回给用户程序。Linux 包括200多个系统调用,主要分为进程控制、文件系统控制、系统控制、内存管理、网络管理、用户管理、进程通信等几类。本方法用到了一下ptrace、mmap、 mprotect等3个系统调用程序。
ptrace系统调用:提供父进程观察和控制另一个进程执行的机制,同时提供查询和修改另一进程的核心影像与寄存器的能力。主要用于执行断点调试和系统调用跟踪。
mmap系统调用:Linux中的程序执行时,需要将对应的进程映象调入进程的虚拟内存空间,就需要通过mmap系统调用向系统申请一段合适的虚拟内存空间。
mprotect系统调用:可以更改一个已经存在的内存映射区的访问权限。
函数库:函数库是用于程序的子程序(函数)的集合。其和可执行文件的区别是,库不是独立程序,他们是向其他程序提供服务的代码。库链接是指把一个或多个库包括到程序中。有两种不同的库链接形式:静态链接和动态链接,相应的,前者链接的库叫做静态库,后者的叫做共享库或动态库。
静态链接:指将函数库的内容直接加入到可执行程序中,即程序本身拥有一份共享函数库中函数的副本,加载时只加载程序本身的文件即可。
动态链接:它提供了一种方法,使可执行程序可以调用外部函数,此函数的代码位于一个独立 SO (或DLL)文件中。该 SO(或DLL)文件包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。SO(或DLL) 有助于共享数据和资源。
装载器:程序文件的解析器,它负责解释程序文件,准备好执行环境(包括场地等资源),形成进程。对于动态链接或静态链接的程序,其装载过程不太相同。静态连接程序,装载过程简单为将程序文件映射到内存。对于动态连接的程序,工作还包括库加载和符号解析重定位。
PPC Linux 2.4.25系统:嵌入式PowerPC架构Linux系统,内核版本2.4.25。
发明内容
本发明的目的是:提供一种用于Linux系统测试代码注入的方法。
本发明的技术方案由五个步骤组成,用于Linux系统下运行进程测试代码注入的方法:
第一步骤,编写编译引导程序及测试代码;引导程序(装载器)在目标进程里申请地址空间,装载测试代码,及使申请的内存空间属性变为可执行;
若目标进程为动态共享链接而成,则测试代码编译为.so文件;若目标进程为静态链接,则编译为.o中间文件;引导程序为加载器,加载测试代码对应的.so或.o文件;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京南瑞继保电气有限公司;南京南瑞继保工程技术有限公司,未经南京南瑞继保电气有限公司;南京南瑞继保工程技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010538375.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种条烟高架输送线上离合用的齿合牙轮机构
- 下一篇:一种圆桌电动转盘机芯