[发明专利]一种代码重定向方法、装置、设备及计算机可读存储介质在审
申请号: | 202210963202.0 | 申请日: | 2022-08-11 |
公开(公告)号: | CN115373681A | 公开(公告)日: | 2022-11-22 |
发明(设计)人: | 贾宏祥;万振华;王颉;李华;董燕 | 申请(专利权)人: | 深圳开源互联网安全技术有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F11/36 |
代理公司: | 深圳市恒申知识产权事务所(普通合伙) 44312 | 代理人: | 廖厚琪 |
地址: | 518100 广东省深圳市龙华区民治*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 代码 定向 方法 装置 设备 计算机 可读 存储 介质 | ||
1.一种代码重定向方法,其特征在于,包括:
将针对初始方法的重定向需求所确定的重定向方法,编译成动态链接库文件;其中,所述重定向方法为用户自定义的包装方法;
在JIT编译器对所述初始方法的CIL代码进行编译之前,采用程序集中待调用方法的CIL代码对所述初始方法的CIL代码进行匹配;其中,所述CIL代码包括:CIL操作码;
若检测到与所述初始方法的CIL代码相匹配的目标调用方法的目标CIL代码,则采用所述目标CIL代码替换所述CIL代码;
在替换过程中,若所述目标调用方法插桩失败,则调用所述动态链接库文件中的所述重定向方法,对所述初始方法进行重定向。
2.根据权利要求1所述的代码重定向方法,其特征在于,所述将针对初始方法的重定向需求所确定的重定向方法,编译成动态链接库文件的步骤之前,还包括:
对所述初始方法的CIL代码进行预处理,并根据预处理结果确定所述初始方法的重定向需求;
根据所述重定向需求确定对应于所述初始方法的所述重定向方法。
3.根据权利要求1所述的代码重定向方法,其特征在于,所述采用程序集中待调用方法的CIL代码对所述初始方法的CIL代码进行匹配的步骤,包括:
基于CIL的运行机制获取所述初始方法的CIL代码;
对所述初始方法的CIL代码进行分析;
根据分析结果添加程序集引用;
将所述初始方法的CIL代码与引用的程序集中待调用方法的CIL代码进行匹配。
4.根据权利要求1所述的代码重定向方法,其特征在于,所述采用所述目标CIL代码替换所述CIL代码的步骤,包括:
通过newobj操作码调用所述初始方法的构造函数,并返回一个目标调用方法的引用实例;
通过stloc.0操作码将所述引用实例推入本地变量栈;其中,所述stloc.0操作码表示为stloc操作码的下标为0,所述下标对应的数据包括:本地变量、方法参数;
通过ldloc.0操作码将下标为0的所述本地变量推出到求值栈,并通过ldloc.1操作码将下标为1的初始方法参数推入所述求值栈;
通过callvirt操作码调用目标调用方法,将所述初始方法参数与所述目标调用方法参数进行替换,并通过stloc.1操作码将所述目标调用方法的返回值推入下标为1的本地变量栈。
5.根据权利要求4所述的代码重定向方法,其特征在于,所述通过stloc.1操作码将所述目标调用方法的返回值推入下标为1的本地变量栈的步骤之前,还包括:
对所述目标调用方法进行插桩;
在插桩成功之后,控制所述初始方法获取所述目标调用方法的所述返回值。
6.根据权利要求4所述的代码重定向方法,其特征在于,所述对所述初始方法进行重定向的步骤,包括:
通过ldarg.1操作码将所述下标为1的所述初始方法的参数压入求值栈;
通过call函数调用所述重定向方法;
通过stloc.0操作码将所述重定向方法的返回值压入下标为0的本地变量栈。
7.根据权利要求1所述的代码重定向方法,其特征在于,所述对所述初始方法进行重定向的步骤之后,还包括:
将所述重定向方法更新至程序集中;
当JIT编译器再次对所述初始方法的CIL代码进行编译时,通过引用所述程序集调用所述重定向方法执行对所述CIL代码的编译。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于深圳开源互联网安全技术有限公司,未经深圳开源互联网安全技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210963202.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:数据共享方法及电子设备
- 下一篇:一种卡通包子造型设备