[发明专利]一种模块回调函数参数不匹配的修复方法及相关设备在审
申请号: | 202011172062.2 | 申请日: | 2020-10-28 |
公开(公告)号: | CN114428636A | 公开(公告)日: | 2022-05-03 |
发明(设计)人: | 周志刚 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F8/72 | 分类号: | G06F8/72;G06F9/48 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 彭博 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 模块 调函 参数 匹配 修复 方法 相关 设备 | ||
本发明提供了一种模块回调函数参数不匹配的修复方法以及相关设备,包括:获取修复程序中回调函数类型中包含的新建参数和源程序上层回调函数中包含的原始参数;比较新建参数和原始参数,将所述新建参数中与所述原始参数中的不同的参数作为新增参数信息;查找所有源程序中关于原始参数回调函数的回调指针,并利用所回调类回调指针对应的虚函数接口,通知上层允许基本代码调用新增参数信息对应的扩展代码来修复,进而忽略掉所述新增参数信息,从而将收到数据的处理逻辑与底层数据进行解耦合,通知上层允许基本代码调用新增参数信息对应的扩展代码来修复,进而忽略掉所述新增参数信息,以解决参数不匹配导致程序执行出现崩溃的问题。
技术领域
本发明涉及计算机程序软件技术领域,尤其涉及一种模块回调函数参数不匹配的修复方法及相关设备。
背景技术
在程序开发中,为了对代码解耦合,通常都会使用设置回调函数的指针,来解决底层功能与上层调用者解除耦合关系,回调函数指针的执行可以让底层功能执行完成后通知调用者。
然而现有的问题是,很多时候程序开发者会对程序来进行分模块开发,那么有的模块升级了代码功能,如对某个内部通知外部的回调函数多增加了一个参数,而另一个模块没有对所有使用回调的地方进行修改增加参数,程序执行时则会导致crash问题。同时回调函数指针无法检查其参数个数,因此如果底层模块增加了函数参数个数,而对应的回调函数没有增加参数个数,程序并不知道不匹配,只有程序执行时并且执行到回调函数时,才会导致程序crash。即为在正常计算机系统运行过程中,因某种原因宕机,或主机、程序停止工作等情况。
对于程序代码没有发布的情况下,很容易的通过修改程序代码来修复该功能。而对于程序已经发布的情况下,则需要一种方法能够修复这样的参数不匹配的情况。
发明内容
本发明提供了一种模块回调函数参数不匹配的修复方法,通过查找所有源程序中关于原始参数回调函数的回调指针,并调用回调类回调指针对应的虚函数接口,基于hook修复技术,忽略掉所述新增参数信息,以解决参数不匹配导致程序执行出现崩溃的问题。
一种模块回调函数参数不匹配的修复方法,包括:
获取修复程序中回调函数类型中包含的新建参数和源程序上层回调函数中包含的原始参数;
比较所述新建参数和所述原始参数获得新增参数;其中,所述新增参数为所述新建参数中与所述原始参数中的不同参数;
查找所有源程序中关于原始参数回调函数的回调指针;
调用所述回调指针对应的虚函数接口,并基于hook技术实现程序修复。
优选的是,所述新增参数的信息包括参数个数、参数命名和参数类型。
优选的是,所述虚函数接口的查找过程包括如下步骤:
编写一个具有嵌套类的新建类,所述嵌套类内定义了虚函数接口,以继承源程序中的类,实现读取数据产生回调的处理逻辑;
查找并记录源程序中所有继承自源程序的类,并记录所述继承自源程序类的创建地址;
并查找所述继承自源程序的类的调用虚函数接口的地址;
其中,所述查找调用虚函数接口的地址的过程通过汇编代码实现。
优选的是,所述查找虚函数接口地址的过程包括:
解析模块中移植的可执行的文件,并解析出只读字段;其中,所述只读字段中存储有每个类的名称和对应的续表;
遍历所述只读字段,通过名称检索方式查找所有继承类,进而创建目标类;
遍历所述续表中的类,并将所述目标类对应的第一个虚函数作为析构函数,并将所述析构函数对应续表的位置作为匹配函数进行调用;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011172062.2/2.html,转载请声明来源钻瓜专利网。