[发明专利]一种基于对齐空洞的内核数据类型动态扩展热补方法在审
申请号: | 202210485098.9 | 申请日: | 2022-05-06 |
公开(公告)号: | CN114924767A | 公开(公告)日: | 2022-08-19 |
发明(设计)人: | 曾庆凯;郭锐 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F8/65 | 分类号: | G06F8/65;G06F8/61;G06F8/71 |
代理公司: | 南京钟山专利代理有限公司 32252 | 代理人: | 徐燕 |
地址: | 210023 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 对齐 空洞 内核 数据类型 动态 扩展 热补 方法 | ||
1.一种基于对齐空洞的内核数据类型扩展热补方法,其特征在于,所述热补方法包括以下步骤:
S1,对补丁文件进行预处理,提取得到热补对象有效信息:
从补丁文件中过滤掉与热补无关和对热补机制有影响的内容,提取补丁的更新信息,将补丁的更新信息分为数据类型更新操作以及相应的函数替换操作,形成相应的描述文件;
S2,根据步骤S1提取得到的输入数据类型更新操作的描述文件,分析热补目标数据类型的内部空洞布局,输出类型布局定义:
根据描述文件枚举待更新的结构名称,通过内核映像中提供的符号表信息查询和对调试信息解析计算热补对象内部的空间布局,转换为空洞的描述和定位;分析扩展成员的空间大小与空洞空间进行匹配,再通过对空洞进行版本的标记和访问模式位的设置,形成更新后的数据类型视图;
S3,结合步骤S1输出的数据类型更新操作的描述文件和步骤S2输出的空洞布局分析输出的新类型定义,编写热补模块程序生成热补模块;编写过程包括:针对涉及类型更新后使用新成员的函数修改其访问的方式,通过指针类型转换的方式重新翻译原数据对象的布局信息,通过基地址偏移的方式完成对新成员的初始化及访问操作;结合对象内部在空洞分析后形成metadata标记来选取不同的访问模式;为热补模块的初始化处增加语义判断来确保初始化操作的执行顺序先于访问,同时提供开发人员访问的公共接口和为系统用户交互开放文件系统接口;
S4,热补模块的安装和生效:将步骤S3中生成的热补模块安装至内核并等待更新点使得补丁内容生效,完成热补更新任务。
2.根据权利要求1所述的基于对齐空洞的内核数据类型扩展热补方法,其特征在于,步骤S1中,对补丁文件进行预处理,提取得到热补对象有效信息的过程包括以下滋补粥:
步骤21,输入补丁文件,对单个文件的差异化进行比较,将补丁文件分解为多个目标文件并记录每个目标文件的路径;
步骤22,逐个判断目标文件是否为与当前热补无关的代码内容,如果是无关内容则转入步骤2B,否则转入步骤23;
步骤23,通过规则库illegal_rules进行匹配,判断匹配路径是否涉及包括与插桩有关以及对常驻函数的判断的更新操作;如果匹配成功则转入步骤2B,否则进入步骤24;
步骤24,判断修改对象的类型,如果是类型定义则转入步骤25,如果是函数修改则转入步骤27;
步骤25,按照对类型定义中的新增、替换和删除成员操作对类型定义的步骤进行分解。记录形式为(op,main_type,sub_type,sub_name),其中op代表对数据类型的新增还是删除还是更新,main_type代表修改的父数据类型体,sub_type代表修改的成员类型,sub_name为成员名称;
步骤26,将分解后的操作并入类型操作集合patch_report.json的type_ops对象的数组内;转入步骤2A;
步骤27,判断是否为宏和静态函数的修改,如果是则进入步骤28,否则转入步骤29;
步骤28,通过人工调整宏在相应函数内使用的展开以及静态函数在调用函数内的重新定义,形成语义等价的调整;
步骤29,将补丁中非类型的修改并入patch_report.json中的func_ops对象的数组内;
步骤2A,会补丁内容进行优化合并形成完整的patch_report.json报告;
步骤2B,判断是否处理到补丁文件结尾,如果是则转入步骤2C,否则转到步骤22;
步骤2C,输出类型更新操作描述集合和函数更新操作集合,同时记录存在差异化的文件名路径。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210485098.9/1.html,转载请声明来源钻瓜专利网。