CN111752620B - 内核模块的处理方法和加载方法 - Google Patents
内核模块的处理方法和加载方法 Download PDFInfo
- Publication number
- CN111752620B CN111752620B CN201910233568.0A CN201910233568A CN111752620B CN 111752620 B CN111752620 B CN 111752620B CN 201910233568 A CN201910233568 A CN 201910233568A CN 111752620 B CN111752620 B CN 111752620B
- Authority
- CN
- China
- Prior art keywords
- kernel module
- offset
- kernel
- memory area
- file
- 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
- 238000011068 loading method Methods 0.000 title claims abstract description 51
- 238000003672 processing method Methods 0.000 title claims abstract description 21
- 238000000034 method Methods 0.000 claims description 73
- 238000012545 processing Methods 0.000 claims description 37
- 230000006870 function Effects 0.000 claims description 9
- 238000005538 encapsulation Methods 0.000 claims description 6
- 238000013507 mapping Methods 0.000 claims description 4
- 238000004458 analytical method Methods 0.000 claims 1
- 238000004891 communication Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 15
- 230000008569 process Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000007723 transport mechanism Effects 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了内核模块的处理方法和加载方法。其中,内核模块的处理方法包括步骤:基于第一特征,生成第一内核模块;修改第一内核模块中第二特征的偏移量,得到第二内核模块。内核模块的加载方法基于该处理方法。同时,本发明还公开了相应的装置及计算设备。
Description
技术领域
本发明涉及嵌入式技术领域,尤其涉及内核模块的处理方法和加载方法。
背景技术
Linux内核是是一个单内核(monolithic kernel),其将所有的内容都集成在一起,优点是效率高,但缺点是可扩展性和可维护性相对较差,因此,Linux内核采用模块机制来运行。即,允许内核在运行时动态地向其中插入或从中删除代码。这些代码(包括相关的子线程、数据、函数入口和函数出口)被一并组合在一个单独的二进制镜像中,也就是内核模块(Loadable Kernel Module,LKM)中。
在内核上运行内核模块时,必须要内核模块与内核的配置完全一致时,方可正常运行。然而,在实际应用中,不同硬件厂家所提供的内核的版本和配置各不相同,这样,为使得内核模块在不同的内核上正常运行,常需要人为手动得去修改内核模块中的配置,使其与当前要运行的内核完全一致,这种做法耗时耗力。
因此,需要一种自适应的内核加载方案,确保内核模块在不同配置的内核上正常加载,避免运行错误。
发明内容
为此,本发明提供了内核模块的处理方法和加载方法,以力图解决或至少缓解上面存在的至少一个问题。
根据本发明的一个方面,提供了一种内核模块的处理方法,包括步骤:基于第一特征,生成第一内核模块;修改第一内核模块中第二特征的偏移量,得到第二内核模块。
可选地,根据本发明的方法还包括步骤:加载第二内核模块。
可选地,根据本发明的方法还包括步骤:解析内核模块的文件结构,获取文件的属性信息;从属性信息中获取第一特征对应的属性的偏移量;根据该偏移量生成第一内核模块。
可选地,在根据本发明的方法中,根据偏移量生成第一内核模块的步骤包括:将内核模块映射到第一内存区域;申请第二内存区域;基于该偏移量,将第一内存区域中的内容拷贝到第二内存区域;根据该偏移量,修改第二内存区域中文件的属性信息,得到第一内核模块。
可选地,在根据本发明的方法中,第二内存区域的长度为第一内存区域的长度与待扩展的扩展长度的总和,其中扩展长度基于内核的版本和配置确定。
可选地,在根据本发明的方法中,基于偏移量,将第一内存区域中的内容拷贝到第二内存区域的步骤包括:利用偏移量将第一内存区域中的内容分为偏移前内容和偏移后内容;利用偏移量和扩展长度,从第二内存区域中划分出偏移前区域和偏移后区域;将偏移前内容和偏移后内容分别拷贝到偏移前区域和偏移后区域。
可选地,在根据本发明的方法中,根据偏移量,修改第二内存区域中文件的属性信息的步骤包括:修改经拷贝后的偏移后区域中数据所对应属性的偏移量值。
可选地,根据本发明的方法还包括步骤:解析第一内核模块的文件结构,获取文件的属性信息;从属性信息中获取第二特征所对应的属性的偏移量;修改该偏移量,得到第二内核模块。
可选地,在根据本发明的方法中,文件的属性信息包括:文件头、文件段结构、文件段名称表、重定位项名称表。
可选地,在根据本发明的方法中,针对不同的内核版本和配置,第一特征的长度不同,第二特征的偏移量不同,并且第一特征为__this_module变量,第二特征为init函数。
根据本发明的一个方面,还提供了一种内核模块的处理方法,包括步骤:修改内核模块中第二特征的偏移量,得到第一内核模块;基于第一特征对第一内核模块进行处理,生成第二内核模块。
根据本发明的另一个方面,提供了一种内核模块的加载方法,包括步骤:加载内核模块;执行如上所述的内核模块的处理方法,来生成第二内核模块;以及运行第二内核模块。
根据本发明的另一个方面,还提供了一种内核模块的加载方法,包括步骤:对内核模块引用的对象进行封装,得到封装后的对象;执行如上所述的内核模块的处理方法,来生成第二内核模块;以及基于封装后的对象,加载第二内核模块。
可选地,在根据本发明的方法中,内核模块引用的对象包括:内核的导出符号和/或结构体。
根据本发明的又一个方面,还提供了一种内核模块的处理装置,包括:第一处理单元,适于基于第一特征,生成第一内核模块;第二处理单元,适于修改第一内核模块中第二特征的偏移量,得到第二内核模块。
根据本发明的再一个方面,还提供了一种内核模块的加载装置,包括:封装单元,适于对内核模块引用的对象进行封装,得到封装后的对象;内核模块的处理装置,适于生成第二内核模块;加载单元,适于基于封装后的对象,加载第二内核模块。
根据本发明的另一个方面,还提供了一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行如上所述方法的指令。
根据本发明的另一个方面,提供了一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得该计算设备执行如上所述的方法。
根据本发明的内核模块的处理方案,考虑到针对不同的内核版本和配置,内核模块的特征有所不同(更进一步地,第一特征的长度不同,第二特征的偏移量不同),故在运行内核模块之前,基于内核模块的特征对内核模块进行动态修正,避免了内核模块出现运行错误,以使内核模块可以在不同配置和版本的内核上正确运行。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一些实施例的计算设备100的示意图;
图2示出了根据本发明一些实施例的内核模块的处理方法200的流程示意图;
图3示出了根据本发明一个实施例的将第一内存区域中的内容拷贝到第二内存区域的示意图;
图4示出了根据本发明一些实施例的内核模块的加载方法400的流程示意图;
图5示出了根据本发明另一些实施例的内核模块的加载方法500的流程示意图;
图6示出了根据本发明又一些实施例的内核模块的加载方法600的流程示意图;
图7示出了根据本发明一些实施例的内核模块的处理装置700的示意图;以及
图8示出了根据本发明一些实施例的内核模块的加载装置800的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的计算设备100的示意图。
如图1所示,在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120(根据本发明的实施方式,操作系统120至少包括Linux操作系统)、一个或者多个应用122以及程序124。在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序124执行指令。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
根据本发明的实施例,计算设备100可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、数码照相机、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。当然,计算设备100还可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,
本发明提供了内核模块的处理方法200和内核模块的加载方法400/方法500/方法600,通过在计算设备100的程序124中存储包括执行方法200和/或方法400和/或方法500和/或方法600的多条指令,来实现动态适应内核配置的内核模块的加载。应当指出,还可以通过在计算设备100上布置相应的应用122(如,内核处理装置700和内核加载装置800),在操作系统上由一个或多个处理器104利用程序124执行相应的指令。
图2示出了根据本发明一些实施例的内核模块的处理方法200的流程示意图。以下将结合图2,详细介绍根据本发明的内核模块的处理方法200的执行过程。如图2所示,方法200始于步骤S210。
在步骤S210中,基于第一特征,生成第一内核模块。申请人发现,针对不同的内核版本和配置,第一特征的长度不同。故在根据本发明的实施例中,在加载内核模块之前,会先基于第一特征对该内核模块进行动态修正。可选地,第一特征为__this_module,它是一个struct module变量,代表了当前的内核模块。
根据本发明的一些实施例,步骤S210又可以分成3步来执行。
步骤1),解析内核模块的文件结构,获取文件的属性信息。
在根据本发明的实施例中,内核模块采用ELF格式文件,其是Linux系统中常见的可执行文件格式,此处不做赘述。内核模块的文件,数据以一段一段的形式进行存储。解析ELF文件,并记录文件的属性信息,可选地,文件的属性信息包括:文件头、文件段结构、文件段名称表、重定位项名称表。
步骤2),从这些属性信息中获取第一特征对应的属性的偏移量。具体地,遍历所有的文件段结构,并结合段名称表,定位到第一特征对应的属性(可选地,第一特征对应的属性为.gnu.linkonce.this_module段),并记录该属性相对于文件头的偏移量。
步骤3),根据该偏移量生成第一内核模块。即,根据该偏移量来扩展内核模块,得到扩展后的内核模块,作为第一内核模块。
根据一种实施例,先在内核空间中申请第一内存区域,将该内核模块映射到第一内存区域。再申请第二内存区域,其中第二内存区域的长度为第一内存区域的长度与待扩展的扩展长度的总和,其中扩展长度基于内核的版本和配置确定。应当指出,本发明的实施例对采用何种方法来确定出该扩展长度并不做过多限制,任何已知或未来可知的相关方法均可以与本发明的实施例相结合,来实现本发明的内核模块的处理方法。
接着,基于经步骤2)确定的偏移量,将第一内存区域中的内容拷贝到第二内存区域。
图3示出了根据本发明一个实施例的将第一内存区310中的内容拷贝到第二内存区域320的示意图。以下结合图3,详细描述该过程。如图3,第一内存区域310从地址M1开始,长度为L1;第二内存区域320从地址M2开始,长度为L2;第一特征对应的属性相对于文件头的偏移量记作P,扩展长度记作L3。
首先,利用偏移量P将第一内存区域310中的内容分为偏移前内容和偏移后内容,如图3,将第一内存区域310分成区域312(从地址M1起至M1+P处)和区域314(从地址M1+P起至M1+L1),其中,区域312中存储的是偏移前内容,区域314中存储的是偏移后内容。同样地,利用偏移量P和扩展长度L3,从第二内存区域320中划分出偏移前区域322(从地址M2起至M2+P处)和偏移后区域326(从地址M2+P+L3起至M2+L2处)。处于偏移前区域322和偏移后区域326中间的区域就是扩展区域324(从地址M2+P起至M2+P+L3处),该扩展区域可以用来存储针对不同配置和版本的内核,所要扩展的内容。而后,将第一内存区域310中的偏移前内容和偏移后内容分别拷贝到偏移前区域322和偏移后区域326。具体地,将偏移前内容顺序拷贝到偏移前区域322,将偏移后内容顺序拷贝到偏移后区域326。再然后,根据该偏移量P,修改第二内存区域320中文件的属性信息。根据一种实施例,在将偏移后内容拷贝到偏移后区域326中后,修改偏移后区域326中数据所对应属性的偏移量值。具体地,将偏移后区域326中的数据,对应在文件头中的偏移量均加上L3,对应在文件段结构中的偏移量均加上L3。此时,第二内存区域320对应的就是第一内核模块。
随后在步骤S220中,修改第一内核模块中第二特征的偏移量,得到第二内核模块。申请人发现,针对不同的内核版本和配置,第二特征中包含的偏移量不同。故在根据本发明的实施例中,在加载内核模块之前,会先基于第二特征对该内核模块进行动态修正。可选地,第二特征为init函数。
根据本发明的一些实施例,步骤S220又可以分成如下3步来执行。
步骤a),解析内核模块的文件结构,获取文件的属性信息。根据本发明的实施例,步骤a)与上述步骤1)可以采用同样的方式实现,此处不做赘述。在一些实施例中,解析经步骤S210处理后的第一内核模块的文件结构,获取相应的属性信息。可选地,文件的属性信息包括:文件头、文件段结构、文件段名称表、重定位项名称表。
步骤b),从属性信息中获取第二特征所对应的属性的偏移量。具体地,针对由步骤a)所获取的属性信息,先遍历所有的文件段结构,并结合段名称表,定位到.rel.gnu.linkonce.this_module段,或者,.rela.gnu.linkonce.this_module段,这两个段在同一个内核模块中只存在一个,是init函数的重定位表。接着,遍历定位到的这个段(即,重定位表),并结合重定位项名称表,从中定位到名称为init_module的重定位项,该重定位项就是第二特征对应的属性。该重定位项中包含了其相对于所属段(即,.rel.gnu.linkonce.this_module)的段头的偏移量,记录该偏移量,就是第二特征所对应的属性的偏移量。
步骤c),修改第二特征对应属性的偏移量,得到第二内核模块。
在一种实施例中,将第二特征对应属性的偏移量修改为正确的偏移地址。应当指出,根据内核的版本和配置,可以确定出其对应的内核模块中,第二特征所对应属性的偏移地址,本发明的实施例对采用何种方法来确定出这个偏移地址,并不做过多限制,任何已知或未来可知的相关方法均可以与本发明的实施例相结合,来实现本发明的内核模块的处理方法。
至此,第二内核模块就可以在不同配置的内核上正确加载,不会出现运行错误。
根据本发明的另一些实施方式,步骤S210和步骤S220的执行过程也可以相互调换。例如,先修改内核模块中第二特征的偏移量,得到第一内核模块;再基于第一特征对这个第一内核模块进行处理,生成第二内核模块。具体每一步的执行过程可以参考前文关于方法200的描述。只要在加载内核模块之前,对第一特征和第二特征所对应的属性进行动态修正,使第二内核模块适应不同配置的内核即可。或者,也可以先解析内核模块的文件结构,获取文件的属性信息,再对第一特征和第二特征对应的属性进行修正(即,只执行一次解析文件结构的操作),本发明的实施例对此均不做过多限制。
基于上述对内核模块的处理方案,本发明的实施例还提供了一种动态适应内核配置的内核模块的加载方案。图4示出了根据本发明一些实施例的内核模块的加载方法400的流程示意图。
如图4所示,方法400的前两个步骤与方法200保持一致:在步骤S410中,基于第一特征,生成第一内核模块;随后在步骤S420中,修改第一内核模块中第二特征的偏移量,得到第二内核模块。在此之后,在步骤S430中,加载第二内核模块。根据一种实施例,采用insmod命令动态加载内核模块。经步骤S410和步骤S420处理后的第二内核模块,能够在不同配置的内核上正常加载,避免了运行错误。
关于步骤S410和步骤S420的描述,可参考前文方法200中的相关描述,篇幅所限,此处不再赘述。另外,如前文所述,步骤S410和步骤S420也可以调换执行顺序,先对第二特征对应的属性进行修正,再对第一特征对应的属性进行修正,本发明的实施例对此均不做限制。
图5示出了根据本发明另一些实施例的内核模块的加载方法500的流程示意图。如图5所示,方法500始于步骤S510。在步骤S510中,加载内核模块。根据一种实施例,采用insmod命令动态加载内核模块。
随后在步骤S520中,执行如上所述的内核模块的处理方法(如方法200),来生成第二内核模块。关于这部分内容,此处不再赘述。
随后在步骤S530中,运行第二内核模块。
根据本发明的内核模块的加载方法500,可以将处理内核模块的工作放在内核中进行,在加载了内核模块后,再处理该内核模块,之后再运行第二内核模块,同样也可以达到动态修正内核模块、使其在不同配置的内核上正常运行的效果。
根据本发明的内核模块的处理方案,在运行内核模块之前,基于内核模块的特征对内核模块进行动态修正,避免了内核模块出现运行错误。基于该处理方案的内核模块的加载方案,使得内核模块可以在不同配置和版本的内核上正确运行。
根据一些实施方式,在Linux系统中,内核模块所引用的对象,会随着内核配置和版本的变化而变化,这就导致内核模块输出到不同配置和版本的内核时,需要修改这些对象。若是对每个版本和配置的内核,都进行一次相应的修改,工作量会很大,为解决这一问题,图6示出了根据本发明又一些实施例的内核模块的加载方法600的流程示意图。
如图6所示,方法600始于步骤S610。在步骤S610中,对内核模块引用的对象进行封装,得到封装后的对象。
在一种实施例中,内核模块引用的对象包括内核的导出符号、内核的结构体等。
其中,内核的导出符号是内核模块可以引用的内核符号,可以是函数或是全局变量。举例来说,在内核配置不同时,导出符号mutex_lock会变化为mutex_lock和mutex_lock_nested两种情况,这时候,内核模块需要根据导出符号的情况来相应修改内核,以实现正常的加载。而根据本发明的实施例,将mutex_lock封装为稳定的stable_mutex_lock,就可以在不用修改内核模块的情况下,将内核模块提供的技术能力输出到不同配置或不同版本的内核上,降低了技术成本。
同理,内核的结构体的大小也会随着内核配置和版本的变化而变化。当内核模块对结构体解引用时,由于结构体长度变化,会造成解引用失败。因此,需要对结构体也进行相应的封装,这样,内核模块在解引用结构体时,就可以使用封装后稳定的解引用接口。举例来说,内核模块对task_struct进行解引用取cred值时,就可以使用封装后的解引用接口struct cred*stable_get_task_cred(struct task_struct*tsk)。
对对象的封装可以采用各种方法来实现,本发明的实施例对此不做过多地限制。如下示出一种封装对象的代码示例。
要封装的对象定义为:
void*memcpy(void*dest,const void*src,size_t count)
在kerndeps.c中对其进行封装:
这个stable_memcpy就是封装后的对象,这样,在内核模块中要引用memcpy时,直接引用stable_memcpy即可。无需再考虑内核的版本和配置。
通过封装这些对象,在内核配置和版本变化时,内核模块都可以引用到稳定的对象,从而使内核模块的兼容性大大增强。
随后在步骤S620中,执行内核模块的处理方法,来对内核模块进行处理,以生成第二内核模块。根据本发明的实施方式,可以采用如前文所述的内核模块的处理方法200,来生成第二内核模块。
随后在步骤S630中,基于封装后的对象,加载第二内核模块。
根据本发明的内核模块的加载方案,由于已经将要引用的对象封装成了稳定的对象,因此,在不同的内核版本与内核配置之间使能内核模块时,无需修改内核模块的实现,就可以将内核模块提供的技术能力输出到相应的内核版本上,大大降低了技术输出的成本。
图7示出了根据本发明一些实施例的内核模块的处理装置700的示意图。该处理装置700用于执行根据本发明的内核模块的处理方法200。
如图7所示,处理装置700包括相互耦接的第一处理单元710和第二处理单元720。其中,第一处理单元710基于第一特征,生成第一内核模块。第二处理单元720修改第一内核模块中第二特征的偏移量,得到第二内核模块。
应当理解,关于处理装置700的具体描述可参考前文关于方法200的相关描述,篇幅所限,此处不再进行赘述。
同样地,图8示出了根据本发明一些实施例的内核模块的加载装置800的示意图。该加载装置800用于执行根据本发明的内核模块的加载方法600。
如图8所示,该加载装置800包括相互耦接的封装单元810、内核模块的处理装置700和加载单元820。其中,封装单元810对内核模块引用的对象进行封装,得到封装后的对象;内核模块的处理装置700生成第二内核模块(关于处理装置700的相关描述可参考前文);加载单元820基于封装后的对象,加载第二内核模块。
应当理解,关于加载装置800的具体描述可参考前文关于加载方法600的相关描述,篇幅所限,此处不再进行赘述。
应当了解,在加载装置800中,也可以通过内核模块的处理装置700对内核模块进行处理,生成第二内核模块,然后通过加载单元820加载第二内核模块(具体可参见加载方法400的相关描述),篇幅所限,此处不做一一展开。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。
Claims (16)
1.一种内核模块的处理方法,包括步骤:
解析内核模块的文件结构,获取文件的属性信息;
从所述属性信息中获取第一特征对应的属性的偏移量;
将所述内核模块映射到第一内存区域;
申请第二内存区域;其中,所述第二内存区域的长度为所述第一内存区域的长度与待扩展的扩展长度的总和,其中扩展长度基于内核的版本和配置确定;
基于所述偏移量,将第一内存区域中的内容拷贝到第二内存区域;
根据所述偏移量,修改第二内存区域中文件的属性信息,得到第一内核模块;
修改所述第一内核模块中第二特征的偏移量,得到第二内核模块。
2.如权利要求1所述的方法,还包括步骤:
加载所述第二内核模块。
3.如权利要求1所述的方法,其中,所述基于偏移量,将第一内存区域中的内容拷贝到第二内存区域的步骤包括:
利用所述偏移量将第一内存区域中的内容分为偏移前内容和偏移后内容;
利用所述偏移量和扩展长度,从所述第二内存区域中划分出偏移前区域和偏移后区域;
将所述偏移前内容和偏移后内容分别拷贝到偏移前区域和偏移后区域。
4.如权利要求3所述的方法,其中,所述根据偏移量,修改第二内存区域中文件的属性信息的步骤包括:
修改经拷贝后的偏移后区域中数据所对应属性的偏移量值。
5.如权利要求1所述的方法,其中,所述修改第一内核模块中第二特征的偏移量,得到第二内核模块的步骤包括:
解析第一内核模块的文件结构,获取文件的属性信息;
从所述属性信息中获取第二特征所对应的属性的偏移量;
修改第二特征所对应的属性的偏移量,得到第二内核模块。
6.如权利要求1或5所述的方法,其中所述文件的属性信息包括:文件头、文件段结构、文件段名称表、重定位项名称表。
7.如权利要求1所述的方法,其中,
针对不同的内核版本和配置,所述第一特征的长度不同,所述第二特征的偏移量不同。
8.如权利要求7所述的方法,其中,所述第一特征为__this_module变量,所述第二特征为init函数。
9.一种内核模块的处理方法,包括步骤:
修改内核模块中第二特征的偏移量,得到第一内核模块;
基于第一特征对所述第一内核模块进行处理,生成第二内核模块;其中,所述第二内核模块通过解析内核模块的文件结构,获取文件的属性信息;从所述属性信息中获取第一特征对应的属性的偏移量;将所述内核模块映射到第一内存区域;申请第二内存区域;其中,所述第二内存区域的长度为所述第一内存区域的长度与待扩展的扩展长度的总和,其中扩展长度基于内核的版本和配置确定;基于所述偏移量,将第一内存区域中的内容拷贝到第二内存区域;根据所述偏移量,修改第二内存区域中文件的属性信息得到。
10.一种内核模块的加载方法,包括步骤:
加载内核模块;
执行如权利要求1-9中任一项所述的内核模块的处理方法,来生成第二内核模块;以及
运行所述第二内核模块。
11.一种内核模块的加载方法,包括步骤:
对内核模块引用的对象进行封装,得到封装后的对象;
执行如权利要求1-9中任一项所述的内核模块的处理方法,来生成第二内核模块;以及
基于所述封装后的对象,加载所述第二内核模块。
12.如权利要求11所述的方法,其中,
所述内核模块引用的对象包括:内核的导出符号和/或结构体。
13.一种内核模块的处理装置,包括:
第一处理单元,适于基于解析内核模块的文件结构,获取文件的属性信息;从所述属性信息中获取第一特征对应的属性的偏移量;将所述内核模块映射到第一内存区域;申请第二内存区域;其中,所述第二内存区域的长度为所述第一内存区域的长度与待扩展的扩展长度的总和,其中扩展长度基于内核的版本和配置确定;基于所述偏移量,将第一内存区域中的内容拷贝到第二内存区域;根据所述偏移量,修改第二内存区域中文件的属性信息,得到第一内核模块;
第二处理单元,适于修改所述第一内核模块中第二特征的偏移量,得到第二内核模块。
14.一种内核模块的加载装置,包括:
封装单元,适于对内核模块引用的对象进行封装,得到封装后的对象;
如权利要求13所述的内核模块的处理装置,适于生成第二内核模块;
加载单元,适于基于所述封装后的对象,加载所述第二内核模块。
15.一种计算设备,包括:
至少一个处理器;和
存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-12中任一项所述方法的指令。
16.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910233568.0A CN111752620B (zh) | 2019-03-26 | 2019-03-26 | 内核模块的处理方法和加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910233568.0A CN111752620B (zh) | 2019-03-26 | 2019-03-26 | 内核模块的处理方法和加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111752620A CN111752620A (zh) | 2020-10-09 |
CN111752620B true CN111752620B (zh) | 2024-08-20 |
Family
ID=72672186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910233568.0A Active CN111752620B (zh) | 2019-03-26 | 2019-03-26 | 内核模块的处理方法和加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752620B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113468533A (zh) * | 2021-07-23 | 2021-10-01 | 浙江大华技术股份有限公司 | 隐藏内核模块的检测清理方法和装置 |
CN115113916A (zh) * | 2022-06-22 | 2022-09-27 | 广州安凯微电子股份有限公司 | 一种Linux内核解耦方法、装置及可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893085A (zh) * | 2016-03-30 | 2016-08-24 | 百度在线网络技术(北京)有限公司 | 内核模块加载方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040099439A (ko) * | 2002-04-17 | 2004-11-26 | 컴퓨터 어소시에이츠 싱크, 인코포레이티드 | 다수의 커널 버전에서 수행하기 위해 커널 모듈을수정하는 장치 및 방법 |
US8429394B1 (en) * | 2008-03-12 | 2013-04-23 | Stone Ridge Technology | Reconfigurable computing system that shares processing between a host processor and one or more reconfigurable hardware modules |
CN104679532B (zh) * | 2013-11-27 | 2018-12-11 | 腾讯科技(深圳)有限公司 | 内核模块加载方法和装置 |
WO2016183028A2 (en) * | 2015-05-10 | 2016-11-17 | Apl Software Inc. | Methods and architecture for enhanced computer performance |
-
2019
- 2019-03-26 CN CN201910233568.0A patent/CN111752620B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893085A (zh) * | 2016-03-30 | 2016-08-24 | 百度在线网络技术(北京)有限公司 | 内核模块加载方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111752620A (zh) | 2020-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111290952B (zh) | 一种动态链接库函数的跟踪方法及装置 | |
EP3267308B1 (en) | Application loading method and device | |
CN113434205B (zh) | 一种操作系统启动方法及计算设备 | |
CN1641583A (zh) | 自描述软件映象更新组件 | |
WO2018040270A1 (zh) | 在Windows系统中加载Linux系统ELF文件的方法及装置 | |
CN111752620B (zh) | 内核模块的处理方法和加载方法 | |
CN112947976B (zh) | 一种操作系统升级方法、计算设备及存储介质 | |
CN114691240A (zh) | 驱动硬件配置信息加载方法、装置和系统,以及计算设备 | |
CN113553010A (zh) | 一种光盘文件校验方法、光盘刻录方法及计算设备 | |
CN112860473B (zh) | 程序运行错误时定位源代码的方法、装置及计算设备 | |
CN113885936A (zh) | 一种定制镜像中软件包依赖的解决方法 | |
CN111049889A (zh) | 一种静态资源上传方法、装置、集成服务器和系统 | |
CN113485712B (zh) | 一种内核裁剪方法及计算设备 | |
CN114003289A (zh) | 一种应用程序运行方法、计算设备及存储介质 | |
CN113849245B (zh) | 一种应用程序运行方法、计算设备及存储介质 | |
CN113821272B (zh) | 一种应用程序运行方法、计算设备及存储介质 | |
CN111913814B (zh) | 对象拷贝方法及计算设备 | |
CN113553211B (zh) | 一种核心转储文件的生成方法、计算设备及存储介质 | |
CN113254888B (zh) | 获取硬件信息的方法、授权控制系统及计算设备 | |
CN114879978A (zh) | 软件包依赖关系的处理方法、计算设备及可读存储介质 | |
CN114691549A (zh) | 一种文件写入方法、装置及计算设备 | |
CN113821273B (zh) | 一种应用程序运行方法、计算设备及存储介质 | |
CN114168489B (zh) | 一种函数信息获取方法、计算设备及存储介质 | |
CN111782237A (zh) | 一种适于在移动终端中运行的应用的更新方法 | |
CN113835927B (zh) | 一种指令执行方法、计算设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201225 Address after: Room 603, 6 / F, Roche Plaza, 788 Cheung Sha Wan Road, Kowloon, China Applicant after: Zebra smart travel network (Hong Kong) Ltd. Address before: The big Cayman capital building, a four - story mailbox 847 Applicant before: Alibaba Group Holding Ltd. |
|
GR01 | Patent grant |