一种数据处理方法、装置、电子设备及存储介质制造方法及图纸

技术编号:30641387 阅读:14 留言:0更新日期:2021-11-04 00:38
本发明专利技术提供了一种数据处理方法、装置、电子设备及存储介质。获取应用程序的可执行文件中的子类的重写函数表,子类继承可执行文件中的基类,重写函数表中包括基类中的需要被替换的原函数的函数地址、基类的类名以及用于替换原函数的目标函数的函数地址。确定子类继承的基类的虚函数表,虚函数表中包括基类中的函数的函数地址。在基类的虚函数表中查找原函数的函数地址。使用目标函数的函数地址替换基类的虚函数表中的原函数的函数地址。如此,避免使用目标函数的函数地址替换了虚函数表中本不应该被替换的函数地址,从而避免出现替换错误的情况,进而避免出现之后应用程序调用函数时调用到错误的函数的情况,进而可以避免应用程序运行错误。序运行错误。序运行错误。

【技术实现步骤摘要】
一种数据处理方法、装置、电子设备及存储介质


[0001]本专利技术涉及计算机
,尤其涉及一种数据处理方法、装置、电子设备及存储介质。

技术介绍

[0002]应用程序包括多个函数,有时候为了实际需求,可能需要将应用程序中的某一函数替换为另一函数。在这种情况下,可以将应用程序的虚函数表中的该某一函数的函数地址修改为该另一函数的函数地址,以使应用程序在基于虚函数表调用函数时,可以得到该另一函数的函数地址,并根据该另一函数的函数地址调用到该另一函数。
[0003]其中,虚函数表中的函数的函数地址并不是通过函数的函数名来索引的,而是通过函数的函数地址在虚函数表中的位置顺序来索引的。例如,可以将虚函数表理解为一个数组,数组中包括多个函数的函数地址,各个函数的函数地址在数组中具有各自的位置顺序,可以根据位置顺序来索引虚函数表中的函数的函数地址。函数的函数地址在虚函数表中的位置顺序与函数的函数名在应用程序中的出现顺序相适配。
[0004]在一个例子中,假设是默认使用目标函数的函数地址替换虚函数表中的位置顺序为N的原函数的函数地址。然而,有时候应用程序可能会更新,例如,在应用程序中插入了新的函数,如果新函数的函数名在应用程序中的出现顺序位于原函数之前,则会导致原函数的函数名在应用程序中的出现顺序变为N+1,进而使得原函数的函数地址在虚函数表中的位置顺序变为N+1。
[0005]如此,在应用程序中的出现顺序为N的函数的函数名变为其他函数的函数名,虚函数表中的位置顺序为N的函数地址变为该其他函数的函数地址。<br/>[0006]在更新后的应用程序运行之后,仍旧会默认使用目标函数的函数地址替换虚函数表中位置顺序为N函数地址,即替换该其他函数的函数地址,而并未替换位置顺序为N+1的原函数的函数地址,也即,出现了替换错误的情况。
[0007]这样就会导致后续在需要调用该其他函数时在虚函数表中无法得到该其他函数的函数地址,进而无法调用到该其他函数,且,在需要调用目标函数时在虚函数表中得到的却是原函数的函数地址,进而无法调用到目标函数,很可能会导致应用程序运行错误。

技术实现思路

[0008]本申请示出了一种数据处理方法、装置、电子设备及存储介质。
[0009]第一方面,本申请示出了一种数据处理方法,所述方法包括:
[0010]在应用程序的开发环境中创建用于继承基类的子类,所述基类为在所述开发环境中已开发的类;
[0011]在所述子类中设置所述基类的类名、所述基类中的需要被替换的原函数的函数名以及用于替换所述原函数的目标函数的函数地址;
[0012]在根据所述开发环境中已开发的所述应用程序的源代码生成所述应用程序的可
执行文件的过程中,根据所述原函数的函数名获取所述原函数的函数地址;
[0013]在所述可执行文件中生成所述子类的重写函数表,所述重写函数表包括所述原函数的函数地址、所述基类的类名以及所述目标函数的函数地址。
[0014]第二方面,本申请示出了一种数据处理方法,所述方法包括:
[0015]获取应用程序的可执行文件中的子类的重写函数表,所述子类继承所述可执行文件中的基类,所述重写函数表中包括所述基类中的需要被替换的原函数的函数地址、所述基类的类名以及用于替换所述原函数的目标函数的函数地址;其中,所述重写函数表是根据在所述应用程序的开发环境中的所述子类中设置的所述基类的类名、所述原函数的函数名以及所述目标函数的函数地址生成的;所述原函数的函数地址是根据所述原函数的函数名得到的;所述子类用于继承所述基类;
[0016]根据所述基类的类名获取所述基类的虚函数表,所述虚函数表中包括所述基类中的函数的函数地址;
[0017]在所述虚函数表中查找所述原函数的函数地址;
[0018]使用所述目标函数的函数地址替换所述虚函数表中的所述原函数的函数地址。
[0019]在一个可选的实现方式中,所述获取应用程序的可执行文件中的子类的重写函数表,包括:
[0020]获取所述可执行文件中的所述子类的内存地址;
[0021]获取所述子类的重写函数表在所述内存地址中的偏移量;
[0022]根据所述偏移量获取所述重写函数表。
[0023]在一个可选的实现方式中,所述获取所述子类的重写函数表在所述内存地址中的偏移量,包括:
[0024]获取所述子类中的特定标志位的值;
[0025]根据所述特定标志位的值确定所述子类的结构体;
[0026]根据所述子类的结构体确定所述偏移量。
[0027]第三方面,本申请示出了一种数据处理装置,所述装置包括:
[0028]创建模块,用于在应用程序的开发环境中创建用于继承基类的子类,所述基类为在所述开发环境中已开发的类;
[0029]设置模块,用于在所述子类中设置所述基类的类名、所述基类中的需要被替换的原函数的函数名以及用于替换所述原函数的目标函数的函数地址;
[0030]第一获取模块,用于在根据所述开发环境中已开发的所述应用程序的源代码生成所述应用程序的可执行文件的过程中,根据所述原函数的函数名获取所述原函数的函数地址;
[0031]生成模块,用于在所述可执行文件中生成所述子类的重写函数表,所述重写函数表包括所述原函数的函数地址、所述基类的类名以及所述目标函数的函数地址。
[0032]第四方面,本申请示出了一种数据处理装置,所述装置包括:
[0033]第二获取模块,用于获取应用程序的可执行文件中的子类的重写函数表,所述子类继承所述可执行文件中的基类,所述重写函数表中包括所述基类中的需要被替换的原函数的函数地址、所述基类的类名以及用于替换所述原函数的目标函数的函数地址;其中,所述重写函数表是根据在所述应用程序的开发环境中的所述子类中设置的所述基类的类名、
所述原函数的函数名以及所述目标函数的函数地址生成的;所述原函数的函数地址是根据所述原函数的函数名得到的;所述子类用于继承所述基类;
[0034]第三获取模块,用于根据所述基类的类名获取所述基类的虚函数表,所述虚函数表中包括所述基类中的函数的函数地址;
[0035]查找模块,用于在所述虚函数表中查找所述原函数的函数地址;
[0036]替换模块,用于使用所述目标函数的函数地址替换所述虚函数表中的所述原函数的函数地址。
[0037]在一个可选的实现方式中,所述第二获取模块包括:
[0038]第一获取单元,用于获取所述可执行文件中的所述子类的内存地址;
[0039]第二获取单元,用于获取所述子类的重写函数表在所述内存地址中的偏移量;
[0040]第三获取单元,用于根据所述偏移量获取所述重写函数表。
[0041]在一个可选的实现方式中,所述第二获取单元包括:
[0042]获取子单元,用于获取所述子类中的特定标志位的值;
[0043]第一确定子单元,用于根据所述特定标志位的值确定所述子类的结构体本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据处理方法,其特征在于,所述方法包括:在应用程序的开发环境中创建用于继承基类的子类,所述基类为在所述开发环境中已开发的类;在所述子类中设置所述基类的类名、所述基类中的需要被替换的原函数的函数名以及用于替换所述原函数的目标函数的函数地址;在根据所述开发环境中已开发的所述应用程序的源代码生成所述应用程序的可执行文件的过程中,根据所述原函数的函数名获取所述原函数的函数地址;在所述可执行文件中生成所述子类的重写函数表,所述重写函数表包括所述原函数的函数地址、所述基类的类名以及所述目标函数的函数地址。2.一种数据处理方法,其特征在于,所述方法包括:获取应用程序的可执行文件中的子类的重写函数表,所述子类继承所述可执行文件中的基类,所述重写函数表中包括所述基类中的需要被替换的原函数的函数地址、所述基类的类名以及用于替换所述原函数的目标函数的函数地址;其中,所述重写函数表是根据在所述应用程序的开发环境中的所述子类中设置的所述基类的类名、所述原函数的函数名以及所述目标函数的函数地址生成的;所述原函数的函数地址是根据所述原函数的函数名得到的;所述子类用于继承所述基类;根据所述基类的类名获取所述基类的虚函数表,所述虚函数表中包括所述基类中的函数的函数地址;在所述虚函数表中查找所述原函数的函数地址;使用所述目标函数的函数地址替换所述虚函数表中的所述原函数的函数地址。3.根据权利要求2所述的方法,其特征在于,所述获取应用程序的可执行文件中的子类的重写函数表,包括:获取所述可执行文件中的所述子类的内存地址;获取所述子类的重写函数表在所述内存地址中的偏移量;根据所述偏移量获取所述重写函数表。4.根据权利要求3所述的方法,其特征在于,所述获取所述子类的重写函数表在所述内存地址中的偏移量,包括:获取所述子类中的特定标志位的值;根据所述特定标志位的值确定所述子类的结构体;根据所述子类的结构体确定所述偏移量。5.一种数据处理装置,其特征在于,所述装置包括:创建模块,用于在应用程序的开发环境中创建用于继承基类的子类,所述基类为在所述开发环境中已开发的类;设置模块,用于在所述子类中设置所述基类的类名、所述基类中的需要被替换的原函数的函数名以及用于替换所述原函数的目标函数的函数地址;...

【专利技术属性】
技术研发人员:邓竹立彭飞
申请(专利权)人:五八有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1