CN104375874B - 加载Linux内核驱动的方法及装置 - Google Patents

加载Linux内核驱动的方法及装置 Download PDF

Info

Publication number
CN104375874B
CN104375874B CN201410766160.7A CN201410766160A CN104375874B CN 104375874 B CN104375874 B CN 104375874B CN 201410766160 A CN201410766160 A CN 201410766160A CN 104375874 B CN104375874 B CN 104375874B
Authority
CN
China
Prior art keywords
kernel
driven
generic
areas
information
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
CN201410766160.7A
Other languages
English (en)
Other versions
CN104375874A (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.)
360 Digital Security Technology Group Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing 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 Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201410766160.7A priority Critical patent/CN104375874B/zh
Publication of CN104375874A publication Critical patent/CN104375874A/zh
Priority to PCT/CN2015/095577 priority patent/WO2016091071A1/zh
Application granted granted Critical
Publication of CN104375874B publication Critical patent/CN104375874B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种加载Linux内核驱动的方法及装置,其中的方法包括:选择与目标系统的CPU平台一致的内核代码作为编译初始通用内核驱动的参考内核代码;在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;将生成的通用内核驱动加载到目标系统的内核中。采用本发明的技术方案,可以把一个通用内核驱动加载到不同内核版本的目标系统中去;可以把同一个驱动加载到大部分的Android手机里。

Description

加载Linux内核驱动的方法及装置
技术领域
本发明涉及计算机技术领域,具体涉及一种加载Linux内核驱动的方法及装置。
背景技术
Linux系统中,加载内核驱动的方法是调用insmod命令。由于Linux的特性,加载的内核驱动的版本信息必须和内核的版本信息完全一致,才能够加载成功。并且由于内核版本升级频繁,并且众多厂商都有自己的定制,导致市场上Android手机上的Linux内核版本多种多样。为了开发一个内核驱动能够运行在某一款Android手机上,必须找到对应的手机的内核源码,把自己的内核驱动代码和内核代码一起编译。这种方式增加了巨大的开发工作量,需要收集海量的各种版本的内核源代码,针对各版本内核编译对应的内核驱动,甚至有些设备的内核源代码根本收集不到,这样就给内核驱动的通用性带来了致命的限制。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的加载Linux内核驱动的方法及装置。
依据本发明的一个方面,提供一种加载Linux内核驱动的方法,包括:选择与目标系统的CPU平台一致的内核代码作为编译初始通用内核驱动的参考内核代码;在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;将生成的通用内核驱动加载到目标系统的内核中。
优选的,所述在参考内核代码的结构体中填充预定大小的字节包括:修改参考内核代码的include/linux/module.h文件中的struct module结构体,在结构体尾部填充预定大小的字节。
优选的,所述填充预定大小的字节,保证经过填充后的参考内核代码的structmodule结构体大于目标系统的struct module结构体。
优选的,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:从所述参考驱动中提取内核校验需要使用到的校验信息;根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息。
优选的,所述校验信息是指内核版本信息:vermagic信息;所述根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息包括:将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段。
优选的,所述校验信息是指内核驱动版本信息以及所使用的导出符号的版本信息:versions区开始64字节;所述根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息包括:用所述参考驱动的versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节。
优选的,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:从所述参考驱动中提取加载执行函数和卸载执行函数的重定位信息;根据从参考驱动中提取的所述重定位信息,修改所述初始通用内核驱动中对应的信息。
优选的,所述重定位信息是指this_module.init和this_mosule.exit的重定位信息;所述根据从参考驱动中提取的所述重定位信息,修改所述初始通用内核驱动中对应的信息包括:将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
优选的,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:判断所述参考驱动中是否包含rel.gnu.linkonce.this_module区;若否,在文件系统中搜索包含rel.gnu.linkonce.this_module区的参考驱动;若是,首先将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段,然后用所述参考驱动的versions区开始64字节覆盖所述初始通用内核驱动的.versions区开始64字节,最后判断参考驱动与初始通用内核驱动的rel.gnu.linkonce.this_module区大小是否一致,如果一致,将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
优选的,将生成的通用内核驱动加载到目标系统的内核中包括:将通用内核驱动写入文件中,通过insmod命令将通用内核驱动加载到目标系统的内核中;或者,利用内存中的通用内核驱动调用init_module系统调用,将所述通用内核驱动加载到目标系统的内核中。
优选的,所述初始通用内核驱动是基于标准Linux内核源代码编译生成的。
优选的,如果所述目标系统是android系统,则选择android系统的内核源代码作为所述参考内核代码;如果所述目标系统是ubuntu系统,则选择ubuntu系统的内核源代码作为所述参考内核代码。
依据本发明的另一个方面,提供一种加载Linux内核驱动的装置,包括:参考内核代码选择单元,用于选择与目标系统的CPU平台一致的内核代码作为编译初始通用内核驱动的参考内核代码;初始通用内核代码编译单元,用于在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;通用内核驱动生成单元,用于在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;通用内核驱动加载单元,用于将生成的通用内核驱动加载到目标系统的内核中。
优选的,所述初始通用内核代码编译单元具体用于:修改参考内核代码的include/linux/module.h文件中的struct module结构体,在结构体尾部填充预定大小的字节。
优选的,所述初始通用内核代码编译单元所填充预定大小的字节,保证经过填充后的参考内核代码的struct module结构体大于目标系统的struct module结构体。
优选的,所述通用内核驱动生成单元具体用于:从所述参考驱动中提取内核校验需要使用到的校验信息;以及,根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息。
优选的,所述校验信息是指内核版本信息:vermagic信息;所述通用内核驱动生成单元具体用于:将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段。
优选的,所述校验信息是指内核驱动版本信息以及所使用的导出符号的版本信息:versions区开始64字节;所述通用内核驱动生成单元具体用于:用所述参考驱动的.versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节。
优选的,所述通用内核驱动生成单元具体用于:从所述参考驱动中提取加载执行函数和卸载执行函数的重定位信息;以及,根据从参考驱动中提取的所述重定位信息,修改所述初始通用内核驱动中对应的信息。
优选的,所述重定位信息是指this_module.init和this_mosule.exit的重定位信息;所述通用内核驱动生成单元具体用于:将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
优选的,所述通用内核驱动生成单元具体用于:判断所述参考驱动中是否包含rel.gnu.linkonce.this_module区;若否,在文件系统中搜索包含rel.gnu.linkonce.this_module区的参考驱动;若是,首先将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段,然后用所述参考驱动的.versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节,最后判断参考驱动与初始通用内核驱动的rel.gnu.linkonce.this_module区大小是否一致,如果一致,将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
优选的,所述通用内核驱动加载单元具体用于:将通用内核驱动写入文件中,通过insmod命令将通用内核驱动加载到目标系统的内核中;或者,利用内存中的通用内核驱动调用init_module系统调用,将所述通用内核驱动加载到目标系统的内核中。
优选的,所述初始通用内核驱动是基于标准Linux内核源代码编译生成的。
优选的,如果所述目标系统是android系统,则所述参考内核代码选择单元选择android系统的内核源代码作为所述参考内核代码;如果所述目标系统是ubuntu系统,则所述参考内核代码选择单元选择ubuntu系统的内核源代码作为所述参考内核代码。
可见,本发明方案通过在参考内核代码结构体中增加一些填充字节,避免目标系统中结构体大于通用内核驱动中结构体,从而避免访问越界;并且,通过根据参考驱动修改初通用始内核驱动,使得生成的通用内核驱动可以通过目标系统的校验以及被正常调用。采用本发明的技术方案,可以把一个通用内核驱动加载到不同内核版本的目标系统中去;可以把同一个驱动加载到大部分的Android手机里。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的加载Linux内核驱动的方法流程图;
图2示出了根据本发明一个实施例的根据参考驱动的信息修改初始通用内核驱动的流程图;以及
图3示出了根据本发明一个实施例的加载Linux内核驱动的装置结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
一般加载内核驱动的方法是调用命令insmod。insmod命令首先把需要加载的内核驱动读入内存,然后调用系统调用init_module,把内核驱动在内存中的地址和长度,以及驱动的参数传递给内核。insmod命令通过系统调用init_module进入内核后,内核首先把用户空间内存里的驱动拷贝到内核空间,然后检查内核驱动是否符合ELF格式,如果不符合,则内核拒绝加载该驱动。接下来内核会根据ELF(Executable and Linkable Format,可执行连接格式)的格式分析内核驱动的各种信息,进行判断、检验,如果校验失败则拒绝加载该驱动。
总体而言,需要校验的信息如下:
(1)vermagic
内核驱动采用的是ELF格式,vermagic在.modinfo区里,vermagic是内核的版本信息,内核会校验正在加载的驱动的vermagic是否跟内核本身的一致。如果不一致则拒绝驱动的加载。
(2)module_layout(内核版本3.0以上)或者struct_module(内核版本2.6以上,3.0以下)的版本信息
module_layout和struct_module的版本信息包含在__versions区。3.0版本以上的内核会检查正在加载的内核驱动的module_layout的版本信息是否与内核本身的一致。2.6以上、3.0以下版本的内核会检查正在加载的内核驱动的struct_module的版本信息是否与内核本身的一致。如果不一致则拒绝驱动的加载。
(3)内核驱动引用到的symbol(符号)的版本信息
一般情况下,内核驱动都会引用到内核中导出的函数或者变量(即:symbol),如果用到了,则会在内核驱动的__versions区里面保存该函数或者变量的版本信息。在内核驱动加载的时候,内核会对函数或者变量在__versions区里面的版本信息与内核里面保存的版本信息做对比,如果不一致则拒绝驱动的加载。
由于Linux的特性,加载内核驱动时会进行上面描述的三种校验,所以很难用一个内核驱动来适应各种不同版本的Linux内核。通常情况下,需要找到对应版本的内核代码,然后把内核驱动与对应的内核代码一起编译,才能让编译出来的内核驱动能通过上面描述的三种校验。由于Linux内核的版本非常多,所以无法做到一个内核驱动能支持所有版本的Linux内核。
本发明针对上述问题,提供一种加载Linux内核驱动的方法及装置,能够使同一个内核驱动加载到运行着各种版本内核的Linux设备上。具体的,本发明所要解决的问题是让同一个内核驱动能加载到不同版本的Linux内核中,而不受上面三种校验的限制。
参见图1,示出了根据本发明一个实施例的加载Linux内核驱动的方法流程图,包括以下步骤:
S101:选择与目标系统的CPU平台一致的内核代码作为编译初始通用内核驱动的参考内核代码;
S102:在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;
S103:在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;
S104:将生成的通用内核驱动加载到目标系统的内核中。
其中,目标系统是一种运行着Linux内核的系统,通用内核驱动需要加载到该系统中;参考内核代码是一份完整的内核代码,内核驱动的编译需要用到该内核代码的版本信息、符号信息和头文件等等,是编译内核驱动必不可少的基础;初始通用内核驱动是基于标准Linux内核源代码编译生成的,初始通用内核驱动是一种二进制的ELF文件,初始通用内核驱动经过本发明方法的处理后,称之为通用内核驱动,才能够加载到不同版本的Linux内核中;通用内核驱动是由初始通用内核驱动经过根据参考内核驱动修改之后生成的,可以加载到不同版本的Linux内核中。
为了解决上述问题,针对内核在驱动加载时所作的校验,本发明提供的方案的基本思路如下:在目标系统中寻找系统自带的内核驱动作为参考驱动,根据参考驱动的信息,修改初始通用内核驱动,使之可以通过内核的三种校验,然后再通过正常的方法加载修改后的内核驱动。
具体的步骤如下:
步骤一:选择与目标系统的CPU平台一致的内核代码,作为编译初始通用内核驱动的参考内核代码。
例如:如果是给Android(Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑)的ARM平台的设备开发初始通用内核驱动,则可以选择google提供的goldfish(Goldfish是一种虚拟的ARM处理器,在android的仿真环境中使用)内核源代码作为参考内核代码。再如,如果目标系统是ubuntu(乌班图,是一个以桌面应用为主的Linux操作系统系统),则选择ubuntu系统的内核源代码作为参考内核代码。
步骤二:修改参考内核代码的include/linux/module.h文件中的struct module结构体,在最后面增加预定大小的字节,例如增加256字节的填充。
由于内核版本的不一致,struct module结构体的大小可能会有变化,为了编译出来的内核驱动可以使用不同的内核版本,把struct module结构体增大256字节,这样内核在使用本发明编译出来的通用内核驱动就不会发生内存越界的行为。
步骤三:把参考内核代码与初始通用内核驱动一起编译,把初始通用内核驱动拷贝到目标系统中,通过代码寻找系统自带的内核驱动作为参考驱动。
步骤四:从参考内核驱动中提取需要的信息,修改初始通用内核驱动,具体流程如图2所示。
对图2中的过程解释如下。
S201:读取初始通用内核驱动。
内核驱动采用的是ELF格式,为了方便修改,把整个ELF格式的驱动读入到内存。
S202:在文件系统中搜索参考驱动。
在目标系统的文件系统中搜索自带的原生的驱动,找到后可以从里面提取信息,以供修改初始通用内核驱动。
S203:判断参考驱动中是否包含.rel.gnu.linkonce.this_module区。
通常的驱动只要一旦加载进入内核就会执行驱动的init函数(加载执行函数),一旦被卸载就会执行驱动的exit函数(卸载执行函数),this_module结构体中的init和exit成员存着这两个函数的地址,由于驱动加载的地址不确定,所以这两个函数的地址在加载之前是未知的,需要在加载完后重新赋值这两个结构体的成员,这就是重定位。.rel.gnu.linkonce.this_module区中存着的就是this_module中需要重定位的信息,就是init和exit两个成员的重定位信息。有的内核驱动并没有init和exit函数,可能只是导出一些函数供其它驱动调用,这种驱动不能作为参考驱动。
S204:读取参考驱动。
把参考驱动的整个内容读入内存,方便信息的提取。
S205:从参考驱动的.modinfo区拷贝vermagic信息到初始通用内核驱动的.modinfo区的vermagic字段。
由于内核会在驱动加载的时候验证vermagic,而参考驱动的vermagic是正确的,所以把vermagic复制到初始通用内核驱动。
S206:用参考驱动的_versions区开始的64字节覆盖初始通用内核驱动_verions区开始64字节。
_version区的每一项占64字节,前面4个字节是版本信息,后面60个字节是函数或者变量的名字,由于2.6和3.0内核中的第一项分别是struct_module和module_layout,所以不管目标系统是什么版本,只需要把前64个字节拷贝到初始通用内核驱动中对应的位置,就可以通过内核的检验,包括对驱动版本的验证以及对需要使用到的符号的验证。
S207:判断参考驱动与初始通用内核驱动的.rel.gnu.linkonce.this_module区大小是否一致。
增加这个判断是防止参考驱动中的this_module中有更多的需要重定位的成员,这样可能会会导致init和exit成员的偏移不正确,导致内核加载出错,甚至内核崩溃。
S208:如果参考驱动与初始通用内核驱动的.rel.gnu.linkonce.this_module区大小一致,则拷贝参考驱动的.rel.gnu.linkonce.this_module到初始通用内核驱动的.rel.gnu.linkonce.this_module。
复制this_module.init和this_module.exit的重定位信息到初始通用内核驱动中,初始通用内核驱动的this_module结构体在编译的时候由于增加了预定大小字节(例如256字节)的填充,所以肯定比目标系统中的this_module的结构体要大,这样init和exit的重定位信息中的偏移量肯定不会超出初始通用内核驱动的this_module结构体。在驱动加载时,内核根据重定位信息把init和exit函数加载后的地址赋值到this_module.init和this_module.exit,然后再调用this_module.init指向的函数。这样整个驱动就算加载成功了。
S209:生成新的通用内核驱动。
把内存中的通用内核驱动写入到文件中,以供insmod加载。
上述是图2的流程,完成之后,就得到了通用内核驱动。
步骤五:通过传统的insmod命令将修改后的通用内核驱动加载进目标系统的内核。
上述技术方案仅仅是示例,一些方面可以做适当调整,比如:
步骤一中,参考内核代码的选择可以有很多种,只要选择与目标系统的CPU的架构是一样的系统内核源代码即可。
步骤二中,module结构体最后的填充256字节,可以用其它数值,只要确保修改后的参考内核代码中的module结构体大小,大于目标系统的module结构体大小。
步骤三中,编译初始通用内核驱动时可以放在参考内核代码内部一起编译,也可以放在外面单独编译。
步骤四中,根据参考驱动修改初始通用内核驱动的行为,可以放在目标系统上执行,也可以把目标系统上的参考驱动拷贝到其它机器上执行;修改初始通用内核驱动的步骤可以做一些顺序上的调整,甚至最后一步不需要写入文件,直接用内存中的通用内核驱动,调用init_module系统调用,把修改过的驱动加载到内核中,这样步骤五就不需要了。
可见,在上述详细过程中,拷贝参考驱动的vermagic信息到初始通用内核驱动,就可以通过内核对vermagic的校验;复制参考驱动__versions区的前64个字节到初始通用内核驱动的__verions区,就可以通过内核对struct_module或者module_layout的驱动版本信息的校验以及符号的校验;复制.rel.gnu.linkonce.this_module区,就可以让内核重定位this_module.ini和this_module.exit到正确的问题,让驱动init函数得到正确的调用。总之,采用本发明的技术方案,就可以把一个通用内核驱动加载到不同内核版本的目标系统中去。实际操作中,可以把同一个驱动加载到大部分的Android手机里。
与上述方法相对应,本发明还提供一种加载Linux内核驱动的装置。该装置可以通过硬件、软件或软硬件结合方式实现。该装置可以是指Linux系统的功能模块,也可以是指安装Linux系统的硬件设备,只要可实现该装置的功能即可。
图3示出了根据本发明一个实施例的加载Linux内核驱动的装置,包括:
参考内核代码选择单元301,用于选择与目标系统的CPU平台一致的内核代码作为编译初始通用内核驱动的参考内核代码;
初始通用内核代码编译单元302,用于在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;
通用内核驱动生成单元303,用于在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;
通用内核驱动加载单元304,用于将生成的通用内核驱动加载到目标系统的内核中。
优选的,所述初始通用内核代码编译单元302具体用于:修改参考内核代码的include/linux/module.h文件中的struct module结构体,在结构体尾部填充预定大小的字节。
优选的,所述初始通用内核代码编译单元302所填充预定大小的字节,保证经过填充后的参考内核代码的struct module结构体大于目标系统的struct module结构体。
优选的,所述通用内核驱动生成单元303具体用于:从所述参考驱动中提取内核校验需要使用到的校验信息;以及,根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息。
优选的,所述校验信息是指内核版本信息:vermagic信息;所述通用内核驱动生成单元303具体用于:将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段。
优选的,所述校验信息是指内核驱动版本信息以及所使用的导出符号的版本信息:versions区开始64字节;所述通用内核驱动生成单元303具体用于:用所述参考驱动的.versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节。
优选的,所述通用内核驱动生成单元303具体用于:从所述参考驱动中提取加载执行函数和卸载执行函数的重定位信息;以及,根据从参考驱动中提取的所述重定位信息,修改所述初始通用内核驱动中对应的信息。
优选的,所述重定位信息是指this_module.init和this_mosule.exit的重定位信息;所述通用内核驱动生成单元303具体用于:将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
优选的,所述通用内核驱动生成单元303具体用于:判断所述参考驱动中是否包含rel.gnu.linkonce.this_module区;若否,在文件系统中搜索包含rel.gnu.linkonce.this_module区的参考驱动;若是,首先将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段,然后用所述参考驱动的.versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节,最后判断参考驱动与初始通用内核驱动的rel.gnu.linkonce.this_module区大小是否一致,如果一致,将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
优选的,所述通用内核驱动加载单元304具体用于:将通用内核驱动写入文件中,通过insmod命令将通用内核驱动加载到目标系统的内核中;或者,利用内存中的通用内核驱动调用init_module系统调用,将所述通用内核驱动加载到目标系统的内核中。
优选的,所述初始通用内核驱动是基于标准Linux内核源代码编译生成的。
优选的,如果所述目标系统是android系统,则所述参考内核代码选择单元301选择android系统的内核源代码作为所述参考内核代码;如果所述目标系统是ubuntu系统,则所述参考内核代码选择单元301选择ubuntu系统的内核源代码作为所述参考内核代码。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的加载Linux内核驱动的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明提供如下方案:
A1、一种加载Linux内核驱动的方法,包括:
选择与目标系统的CPU平台一致的内核代码作为编译初始通用内核驱动的参考内核代码;
在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;
在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;
将生成的通用内核驱动加载到目标系统的内核中。
A2、如A1所述的方法,所述在参考内核代码的结构体中填充预定大小的字节包括:
修改参考内核代码的include/linux/module.h文件中的struct module结构体,在结构体尾部填充预定大小的字节。
A3、如A2所述的方法,所述填充预定大小的字节,保证经过填充后的参考内核代码的struct module结构体大于目标系统的struct module结构体。
A4、如A1所述的方法,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:
从所述参考驱动中提取内核校验需要使用到的校验信息;
根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息。
A5、如A4所述的方法,所述校验信息是指内核版本信息:vermagic信息;
所述根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息包括:
将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段。
A6、如A4所述的方法,所述校验信息是指内核驱动版本信息以及所使用的导出符号的版本信息:versions区开始64字节;
所述根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息包括:
用所述参考驱动的versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节。
A7、如A1所述的方法,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:
从所述参考驱动中提取加载执行函数和卸载执行函数的重定位信息;
根据从参考驱动中提取的所述重定位信息,修改所述初始通用内核驱动中对应的信息。
A8、如A7所述的方法,所述重定位信息是指this_module.init和this_mosule.exit的重定位信息;
所述根据从参考驱动中提取的所述重定位信息,修改所述初始通用内核驱动中对应的信息包括:
将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
A9、如A1所述的方法,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:
判断所述参考驱动中是否包含rel.gnu.linkonce.this_module区;
若否,在文件系统中搜索包含rel.gnu.linkonce.this_module区的参考驱动;
若是,首先将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段,然后用所述参考驱动的versions区开始64字节覆盖所述初始通用内核驱动的.versions区开始64字节,最后判断参考驱动与初始通用内核驱动的rel.gnu.linkonce.this_module区大小是否一致,如果一致,将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
A10、如A1所述的方法,将生成的通用内核驱动加载到目标系统的内核中包括:
将通用内核驱动写入文件中,通过insmod命令将通用内核驱动加载到目标系统的内核中;或者,
利用内存中的通用内核驱动调用init_module系统调用,将所述通用内核驱动加载到目标系统的内核中。
A11、如A1所述的方法,所述初始通用内核驱动是基于标准Linux内核源代码编译生成的。
A12、如A1所述的方法,如果所述目标系统是android系统,则选择android系统的内核源代码作为所述参考内核代码;如果所述目标系统是ubuntu系统,则选择ubuntu系统的内核源代码作为所述参考内核代码。
B13、一种加载Linux内核驱动的装置,包括:
参考内核代码选择单元,用于选择与目标系统的CPU平台一致的内核代码作为编译初始通用内核驱动的参考内核代码;
初始通用内核代码编译单元,用于在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;
通用内核驱动生成单元,用于在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;
通用内核驱动加载单元,用于将生成的通用内核驱动加载到目标系统的内核中。
B14、如B3所述的装置,所述初始通用内核代码编译单元具体用于:修改参考内核代码的include/linux/module.h文件中的struct module结构体,在结构体尾部填充预定大小的字节。
B15、如B14所述的装置,所述初始通用内核代码编译单元所填充预定大小的字节,保证经过填充后的参考内核代码的struct module结构体大于目标系统的struct module结构体。
B16、如B13所述的装置,所述通用内核驱动生成单元具体用于:从所述参考驱动中提取内核校验需要使用到的校验信息;以及,根据从参考驱动中提取的所述校验信息,修改所述初始通用内核驱动中对应的信息。
B17、如B16所述的装置,所述校验信息是指内核版本信息:vermagic信息;所述通用内核驱动生成单元具体用于:将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段。
B18、如B16所述的装置,所述校验信息是指内核驱动版本信息以及所使用的导出符号的版本信息:versions区开始64字节;所述通用内核驱动生成单元具体用于:用所述参考驱动的.versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节。
B19、如B13所述的装置,所述通用内核驱动生成单元具体用于:从所述参考驱动中提取加载执行函数和卸载执行函数的重定位信息;以及,根据从参考驱动中提取的所述重定位信息,修改所述初始通用内核驱动中对应的信息。
B20、如B19所述的装置,所述重定位信息是指this_module.init和this_mosule.exit的重定位信息;所述通用内核驱动生成单元具体用于:将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
B21、如B13所述的装置,所述通用内核驱动生成单元具体用于:判断所述参考驱动中是否包含rel.gnu.linkonce.this_module区;若否,在文件系统中搜索包含rel.gnu.linkonce.this_module区的参考驱动;若是,首先将参考驱动的modinfo区的vermagic信息拷贝到初始通用内核驱动的modinfo区的vermagic字段,然后用所述参考驱动的.versions区开始64字节覆盖所述初始通用内核驱动的versions区开始64字节,最后判断参考驱动与初始通用内核驱动的rel.gnu.linkonce.this_module区大小是否一致,如果一致,将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述初始通用内核驱动中的rel.gnu.linkonce.this_module区。
B22、如B13所述的装置,所述通用内核驱动加载单元具体用于:将通用内核驱动写入文件中,通过insmod命令将通用内核驱动加载到目标系统的内核中;或者,利用内存中的通用内核驱动调用init_module系统调用,将所述通用内核驱动加载到目标系统的内核中。
B23、如B13所述的装置,所述初始通用内核驱动是基于标准Linux内核源代码编译生成的。
B24、如B13所述的装置,如果所述目标系统是android系统,则所述参考内核代码选择单元选择android系统的内核源代码作为所述参考内核代码;如果所述目标系统是ubuntu系统,则所述参考内核代码选择单元选择ubuntu系统的内核源代码作为所述参考内核代码。

Claims (24)

1.一种加载Linux内核驱动的方法,其特征在于,包括:
选择目标系统可识别的内核代码作为编译初始通用内核驱动的参考内核代码;
在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;
在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;
将生成的通用内核驱动加载到目标系统的内核中。
2.如权利要求1所述的方法,其特征在于,所述在参考内核代码的结构体中填充预定大小的字节包括:
修改参考内核代码的include/linux/module.h文件中的struct module结构体,在结构体尾部填充预定大小的字节。
3.如权利要求2所述的方法,其特征在于,所述填充预定大小的字节,保证经过填充后的参考内核代码的struct module结构体大于目标系统的struct module结构体。
4.如权利要求1所述的方法,其特征在于,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:
从所述参考驱动中提取内核校验需要使用到的校验信息;
根据从参考驱动中提取的所述校验信息,修改所述经过编译后的初始通用内核驱动中对应的信息。
5.如权利要求4所述的方法,其特征在于,所述校验信息是指内核版本信息:vermagic信息;
所述根据从参考驱动中提取的所述校验信息,修改所述经过编译后的初始通用内核驱动中对应的信息包括:
将参考驱动的modinfo区的vermagic信息拷贝到经过编译后的初始通用内核驱动的modinfo区的vermagic字段。
6.如权利要求4所述的方法,其特征在于,所述校验信息是指内核驱动版本信息以及所使用的导出符号的版本信息:versions区开始64字节;
所述根据从参考驱动中提取的所述校验信息,修改所述经过编译后的初始通用内核驱动中对应的信息包括:
用所述参考驱动的versions区开始64字节覆盖所述经过编译后的初始通用内核驱动的versions区开始64字节。
7.如权利要求1所述的方法,其特征在于,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:
从所述参考驱动中提取加载执行函数和卸载执行函数的重定位信息;
根据从参考驱动中提取的所述重定位信息,修改所述经过编译后的初始通用内核驱动中对应的信息。
8.如权利要求7所述的方法,其特征在于,所述重定位信息是指this_module.init和this_mosule.exit的重定位信息;
所述根据从参考驱动中提取的所述重定位信息,修改所述经过编译后的初始通用内核驱动中对应的信息包括:
将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述经过编译后的初始通用内核驱动中的rel.gnu.linkonce.this_module区。
9.如权利要求1所述的方法,其特征在于,所述根据参考驱动的信息修改上述经过编译后的初始通用内核驱动包括:
判断所述参考驱动中是否包含rel.gnu.linkonce.this_module区;
若否,在文件系统中搜索包含rel.gnu.linkonce.this_module区的参考驱动;
若是,首先将参考驱动的modinfo区的vermagic信息拷贝到经过编译后的初始通用内核驱动的modinfo区的vermagic字段,然后用所述参考驱动的versions区开始64字节覆盖所述经过编译后的初始通用内核驱动的versions区开始64字节,最后判断参考驱动与经过编译后的初始通用内核驱动的rel.gnu.linkonce.this_module区大小是否一致,如果一致,将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述经过编译后的初始通用内核驱动中的rel.gnu.linkonce.this_module区。
10.如权利要求1所述的方法,其特征在于,将生成的通用内核驱动加载到目标系统的内核中包括:
将通用内核驱动写入文件中,通过insmod命令将通用内核驱动加载到目标系统的内核中;或者,
利用内存中的通用内核驱动调用init_module系统调用,将所述通用内核驱动加载到目标系统的内核中。
11.如权利要求1所述的方法,其特征在于,所述初始通用内核驱动是基于标准Linux内核源代码编译生成的。
12.如权利要求1所述的方法,其特征在于,如果所述目标系统是android系统,则选择android系统的内核源代码作为所述参考内核代码;如果所述目标系统是ubuntu系统,则选择ubuntu系统的内核源代码作为所述参考内核代码。
13.一种加载Linux内核驱动的装置,其特征在于,包括:
参考内核代码选择单元,用于选择目标系统可识别的内核代码作为编译初始通用内核驱动的参考内核代码;
初始通用内核代码编译单元,用于在参考内核代码的结构体中填充预定大小的字节,并将填充后的参考内核代码与初始通用内核驱动一起编译;
通用内核驱动生成单元,用于在目标系统中查找目标系统自带的内核驱动作为参考驱动,并根据参考驱动的信息修改上述经过编译后的初始通用内核驱动,生成通用内核驱动;
通用内核驱动加载单元,用于将生成的通用内核驱动加载到目标系统的内核中。
14.如权利要求13所述的装置,其特征在于,所述初始通用内核代码编译单元具体用于:修改参考内核代码的include/linux/module.h文件中的struct module结构体,在结构体尾部填充预定大小的字节。
15.如权利要求14所述的装置,其特征在于,所述初始通用内核代码编译单元所填充预定大小的字节,保证经过填充后的参考内核代码的struct module结构体大于目标系统的struct module结构体。
16.如权利要求13所述的装置,其特征在于,所述通用内核驱动生成单元具体用于:从所述参考驱动中提取内核校验需要使用到的校验信息;以及,根据从参考驱动中提取的所述校验信息,修改所述经过编译后的初始通用内核驱动中对应的信息。
17.如权利要求16所述的装置,其特征在于,所述校验信息是指内核版本信息:vermagic信息;所述通用内核驱动生成单元具体用于:将参考驱动的modinfo区的vermagic信息拷贝到经过编译后的初始通用内核驱动的modinfo区的vermagic字段。
18.如权利要求16所述的装置,其特征在于,所述校验信息是指内核驱动版本信息以及所使用的导出符号的版本信息:versions区开始64字节;所述通用内核驱动生成单元具体用于:用所述参考驱动的versions区开始64字节覆盖所述经过编译后的初始通用内核驱动的versions区开始64字节。
19.如权利要求13所述的装置,其特征在于,所述通用内核驱动生成单元具体用于:从所述参考驱动中提取加载执行函数和卸载执行函数的重定位信息;以及,根据从参考驱动中提取的所述重定位信息,修改所述经过编译后的初始通用内核驱动中对应的信息。
20.如权利要求19所述的装置,其特征在于,所述重定位信息是指this_module.init和this_mosule.exit的重定位信息;所述通用内核驱动生成单元具体用于:将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述经过编译后的初始通用内核驱动中的rel.gnu.linkonce.this_module区。
21.如权利要求13所述的装置,其特征在于,所述通用内核驱动生成单元具体用于:判断所述参考驱动中是否包含rel.gnu.linkonce.this_module区;若否,在文件系统中搜索包含rel.gnu.linkonce.this_module区的参考驱动;若是,首先将参考驱动的modinfo区的vermagic信息拷贝到经过编译后的初始通用内核驱动的modinfo区的vermagic字段,然后用所述参考驱动的versions区开始64字节覆盖所述经过编译后的初始通用内核驱动的versions区开始64字节,最后判断参考驱动与经过编译后的初始通用内核驱动的rel.gnu.linkonce.this_module区大小是否一致,如果一致,将所述参考驱动中的rel.gnu.linkonce.this_module区的内容拷贝到所述经过编译后的初始通用内核驱动中的rel.gnu.linkonce.this_module区。
22.如权利要求13所述的装置,其特征在于,所述通用内核驱动加载单元具体用于:将通用内核驱动写入文件中,通过insmod命令将通用内核驱动加载到目标系统的内核中;或者,利用内存中的通用内核驱动调用init_module系统调用,将所述通用内核驱动加载到目标系统的内核中。
23.如权利要求13所述的装置,其特征在于,所述初始通用内核驱动是基于标准Linux内核源代码编译生成的。
24.如权利要求13所述的装置,其特征在于,如果所述目标系统是android系统,则所述参考内核代码选择单元选择android系统的内核源代码作为所述参考内核代码;如果所述目标系统是ubuntu系统,则所述参考内核代码选择单元选择ubuntu系统的内核源代码作为所述参考内核代码。
CN201410766160.7A 2014-12-11 2014-12-11 加载Linux内核驱动的方法及装置 Active CN104375874B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410766160.7A CN104375874B (zh) 2014-12-11 2014-12-11 加载Linux内核驱动的方法及装置
PCT/CN2015/095577 WO2016091071A1 (zh) 2014-12-11 2015-11-25 加载Linux内核驱动的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410766160.7A CN104375874B (zh) 2014-12-11 2014-12-11 加载Linux内核驱动的方法及装置

Publications (2)

Publication Number Publication Date
CN104375874A CN104375874A (zh) 2015-02-25
CN104375874B true CN104375874B (zh) 2017-05-17

Family

ID=52554814

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410766160.7A Active CN104375874B (zh) 2014-12-11 2014-12-11 加载Linux内核驱动的方法及装置

Country Status (2)

Country Link
CN (1) CN104375874B (zh)
WO (1) WO2016091071A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104375874B (zh) * 2014-12-11 2017-05-17 北京奇虎科技有限公司 加载Linux内核驱动的方法及装置
CN105549965A (zh) * 2015-12-09 2016-05-04 浪潮电子信息产业股份有限公司 一种将驱动集成到不同Linux内核版本的方法
CN105893085A (zh) * 2016-03-30 2016-08-24 百度在线网络技术(北京)有限公司 内核模块加载方法和装置
CN106547706A (zh) * 2016-11-16 2017-03-29 公安部物证鉴定中心 一种基于源内核的手机动态内存提取方法
CN110569068A (zh) * 2018-06-06 2019-12-13 南通研祥智能科技有限公司 一种Linux驱动加载程序的方法及装置
CN110083363B (zh) * 2019-04-22 2022-04-01 珠海网博信息科技股份有限公司 一种Linux内核动态注入方式截取无线数据包的方法
CN110990072A (zh) * 2019-11-08 2020-04-10 杭州智控网络有限公司 价签屏幕多驱动动态加载方法
CN111984334A (zh) * 2020-08-17 2020-11-24 上海睿赛德电子科技有限公司 一种轻量的操作系统内核与驱动分离方法
CN114546500A (zh) * 2022-01-28 2022-05-27 郑州信大捷安信息技术股份有限公司 一种支持多设备的密码卡驱动实现方法和系统
CN114860324B (zh) * 2022-05-27 2024-03-19 裕太微电子股份有限公司 一种基于Linux的以太网phy内核驱动验证方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102479097A (zh) * 2010-11-26 2012-05-30 中国科学院声学研究所 一种支持多级加载的安全嵌入式操作系统
CN102830983A (zh) * 2011-06-14 2012-12-19 上海未来宽带技术及应用工程研究中心有限公司 一种可动态加载不同终端交换芯片驱动的方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7287259B2 (en) * 2000-04-24 2007-10-23 Microsoft Corporation Isolating assembly versions for binding to application programs
WO2003090077A1 (en) * 2002-04-17 2003-10-30 Computer Associates Think, Inc. Apparatus and method for modifying a kernel module to run on multiple kernel versions
US8505003B2 (en) * 2010-04-28 2013-08-06 Novell, Inc. System and method for upgrading kernels in cloud computing environments
CN104021023A (zh) * 2014-06-24 2014-09-03 浪潮电子信息产业股份有限公司 一种突破内核模块版本控制解决方法
CN104375874B (zh) * 2014-12-11 2017-05-17 北京奇虎科技有限公司 加载Linux内核驱动的方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102479097A (zh) * 2010-11-26 2012-05-30 中国科学院声学研究所 一种支持多级加载的安全嵌入式操作系统
CN102830983A (zh) * 2011-06-14 2012-12-19 上海未来宽带技术及应用工程研究中心有限公司 一种可动态加载不同终端交换芯片驱动的方法

Also Published As

Publication number Publication date
WO2016091071A1 (zh) 2016-06-16
CN104375874A (zh) 2015-02-25

Similar Documents

Publication Publication Date Title
CN104375874B (zh) 加载Linux内核驱动的方法及装置
CN106022130B (zh) 加固应用程序的脱壳方法及装置
US9134966B2 (en) Management of mixed programming languages for a simulation environment
CN106776334A (zh) 基于注释生成测试用例方法及装置
CN106371940A (zh) 一种程序崩溃解决方法及装置
Kim et al. Industrial application of concolic testing approach: A case study on libexif by using CREST-BV and KLEE
CN105204916B (zh) 基于环境变量的项目进程运行方法及装置
CN104572235A (zh) 一种可加载内核模块的编译方法和装置
GB2508643A (en) Method for Performing a Regression Test after Modifying Source Code File
CN104573420B (zh) 防止进程被误杀的方法和装置
US11693760B2 (en) System and methods for live debugging of transformed binaries
US9058427B2 (en) Iterative generation of symbolic test drivers for object-oriented languages
Verbeek et al. Sound C Code Decompilation for a subset of x86-64 Binaries
CN107908444A (zh) 终端应用的挂钩方法及装置
CN107145365A (zh) 生成应用程序安装包的方法、加载应用程序的方法及装置
CN104317715A (zh) 基于模拟器的中央处理器指令集的功能测试自动实施方法
CN106933591A (zh) 代码合并的方法及装置
CN112506785A (zh) Html5游戏页面登录的自动化测试方法、装置、设备和介质
US11868465B2 (en) Binary image stack cookie protection
CN108133126A (zh) 一种安卓应用的加固方法和装置
CN109343868A (zh) 应用安装方法、电子设备及计算机存储介质
Martorell et al. Improving adaptiveness of autosar embedded applications
CN107943517A (zh) 终端应用的挂钩方法及装置
CN106529287A (zh) 应用漏洞自动加固的方法及装置
CN106681782A (zh) 一种编译安卓安装包的动态链接库so文件的方法和装置

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
CP01 Change in the name or title of a patent holder

Address after: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee after: Beijing Qizhi Business Consulting Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.

CP01 Change in the name or title of a patent holder
TR01 Transfer of patent right

Effective date of registration: 20210628

Address after: 100016 1773, 15 / F, 17 / F, building 3, No.10, Jiuxianqiao Road, Chaoyang District, Beijing

Patentee after: Beijing Hongteng Intelligent Technology Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Beijing Qizhi Business Consulting Co.,Ltd.

TR01 Transfer of patent right
CP01 Change in the name or title of a patent holder

Address after: 100016 1773, 15 / F, 17 / F, building 3, No.10, Jiuxianqiao Road, Chaoyang District, Beijing

Patentee after: Sanliu0 Digital Security Technology Group Co.,Ltd.

Address before: 100016 1773, 15 / F, 17 / F, building 3, No.10, Jiuxianqiao Road, Chaoyang District, Beijing

Patentee before: Beijing Hongteng Intelligent Technology Co.,Ltd.

CP01 Change in the name or title of a patent holder