一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于内联函数分析的内核函数动态定位方法与流程

2023-01-05 17:28:52 来源:中国专利 TAG:

技术特征:
1.一种基于内联函数分析的内核函数动态定位方法,其特征在于,具体包括以下步骤:步骤1、根据linux内核版本源代码,建立未导出内核函数的内核函数依赖库,对于存在内联可能的未导出内核函数建立内联函数特征库,其中,内核函数依赖库保存由多个具有调用关系的函数节点组成的、起点为已导出内核函数且终点为未导出内核函数的函数调用关系,函数节点采用函数名及被调用位次表示,被调用位次是指该函数节点在上级函数节点中第一次被调用时在上级函数节点的所有函数调用中的排序;内联函数特征库保存与未导出内核函数相关的内联函数代码;步骤2、加载包含未导出内核函数的内核模块,查找内联函数特征库,若存在未导出内核函数的记录且记录为二元组,则执行步骤3;若存在未导出内核函数的记录且记录为四元组,则获取所有包含未导出内核函数的四元组执行步骤4;若不存在未导出内核函数的记录,则执行步骤5;步骤3、将内联函数代码的长度记为codelength;动态申请大小为memorylength字节、起始地址为codeaddress的内存,且将该内存的权限设置为可读写与可执行,其中,memorylength的取值为codelength与设定偏移量之和;在codeaddress地址处写入与函数入口初始化操作相关的二进制代码,该二进制代码的长度为functionentrycodelength,执行函数入口的初始化操作,再将内联函数代码复制到codeaddress functionentrycodelength地址处,在内联函数代码后写入函数返回指令;将codeaddress作为未导出内核函数的内核地址,结束本流程;步骤4、获取四元组中的已导出内核函数的内核地址,采用所有四元组中的内联函数代码逐一与已导出内核函数的当前二进制代码进行代码匹配,选取具有最高相似度的内联函数代码作为未导出内核函数的内联函数代码,执行步骤3;步骤5、查找内核函数依赖库得到未导出内核函数相关的函数调用关系,从函数调用关系中起点位置的已导出内核函数的内核地址处开始执行反编译,再根据函数节点中的调用位次依次获取下级函数节点的内核地址,直至获取未导出内核函数的内核地址,结束本流程。2.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤1中所述函数调用关系为:采用有向图表示,有向图中的节点表示函数节点,有向图中的有向边表示函数间的调用关系。3.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤1中所述对于存在内联可能的未导出内核函数建立内联函数特征库的过程,包括以下步骤:步骤1.1、在linux内核版本源代码中,若存在已导出内核函数对未导出内核函数的调用,则执行步骤1.2;若调用未导出内核函数的内核函数为未导出内核函数,则执行步骤1.5;步骤1.2、选取编译优化选项,编译调用了未导出内核函数的已导出内核函数所在的代码文件得到目标文件;步骤1.3、对步骤1.2中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则执行步骤1.4;如果不是则获取未导出内核函数的内联函数代码,将由未导出内核函数、已导出内核函数、编译优化选项及内联函数代码组成的四元组作为内联函数特征保存到内联函数特征库中,执行步骤1.4;
步骤1.4、若未遍历编译优化选项,则更换编译优化选项执行步骤1.2;否则结束当前流程;步骤1.5、选取编译优化选项,编译调用了未导出内核函数的内核函数所在的代码文件生成目标文件;步骤1.6、对步骤1.5中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则执行步骤1.7;如果不是则获取未导出内核函数的内联函数代码,将由未导出内核函数及内联函数代码组成的二元组作为内联函数特征保存到内联函数特征库中,执行步骤1.7;步骤1.7、若未遍历编译优化选项,则更换编译优化选项执行步骤1.5;否则结束当前流程。4.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤3中所述将codeaddress作为未导出内核函数的内核地址之后将codeaddress地址对应内存的权限设置为可读与可执行。5.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤3中的所述设定偏移量为256字节。6.根据权利要求3所述的内核函数动态定位方法,其特征在于,所述编译优化选项为:
“‑
o”、
“‑
o1”、
“‑
o2”、
“‑
o3”或
“‑
ofast”。

技术总结
本发明公开了一种基于内联函数分析的内核函数动态定位方法,通过分析已有内核版本的源代码为未导出内核函数建立内核函数依赖库及内联函数特征库,在内核模块加载过程中对于存在内联函数代码的未导出内核函数采用内联函数代码动态构建未导出内核函数的代码区域,对于不存在内联函数代码的未导出内核函数则根据内核函数依赖库迭代查找未导出内核函数的内核地址,从而在不修改内核代码、不依赖内核函数的情况下实现了运行时的未导出内核函数的内核地址的动态获取。数的内核地址的动态获取。


技术研发人员:温研
受保护的技术使用者:北京麟卓信息科技有限公司
技术研发日:2022.11.27
技术公布日:2022/12/30
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献