[发明专利]一种C-sharp中函数复制方法及装置有效
申请号: | 201710841734.6 | 申请日: | 2017-09-18 |
公开(公告)号: | CN107632934B | 公开(公告)日: | 2021-02-02 |
发明(设计)人: | 刘吉林;张文明;陈少杰 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 sharp 函数 复制 方法 装置 | ||
1.一种C-sharp中函数复制方法,其特征在于,包括:
S1,获取C-sharp程序的程序集,若所述程序集为目标函数所在的程序集,则根据所述程序集获取所述目标函数的元数据,所述元数据用于描述目标函数的属性信息,所述属性信息包括:存储位置、历史数据和文件记录中的至少一种;
S2,使用所述目标函数的元数据,创建复制函数;
S3,获取所述目标函数的函数体,将所述函数体设置到创建的所述复制函数中,所述函数体用于表示所述复制函数的具体实现。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1具体包括:
创建CLR Profiler实例,在所述CLR Profiler实例中加载所述C-sharp程序的程序集;
在ICorProfilerCallback::ModuleLoadStarted方法回调时,使用ICorProfilerInfo::GetModuleInfo方法获取所述程序集的名称;
若所述程序集的名称为所述目标函数所在程序集的名称,则根据所述程序集获取所述目标函数的元数据。
3.根据权利要求1或2所述的方法,其特征在于,所述步骤S1中获取所述目标函数的元数据的步骤具体包括:
使用ICorProfilerInfo::GetModuleMetaData方法,获取所述程序集的ImetaDataImport接口实例;
在所述ImetaDataImport接口实例中使用IMetaDataImport::GetMethodProps方法获取所述目标函数的元数据。
4.根据权利要求1或2所述的方法,其特征在于,所述步骤S2具体包括:
在ICorProfilerCallback::ModuleLoadStarted方法的回调中,将所述目标函数的元数据作为所述复制函数的函数声明创建所述复制函数。
5.根据权利要求1或2所述的方法,其特征在于,所述步骤S3具体包括:
在ICorProfilerCallback::JITCompilationStarted方法回调时,使用ICorProfilerInfo::GetFunctionInfo方法获取所述目标函数的函数体;
将创建的所述复制函数传入ICorProfilerCallback::JITCompilationStarted方法;
将所述目标函数的函数体设置到所述复制函数中。
6.根据权利要求5所述的方法,其特征在于,将所述目标函数的函数体设置到所述复制函数中的步骤具体包括:
使用ImethodMalloc接口为所述目标函数的函数体分配一块内存;
将所述目标函数的函数体复制到所述内存中;
使用ICorProfilerInfo::SetILFunctionBody方法将所述内存中的函数体设置到所述复制函数中。
7.一种C-sharp中函数复制装置,其特征在于,包括:
获取单元,用于获取C-sharp程序的程序集,若所述程序集为目标函数所在的程序集,则根据所述程序集获取所述目标函数的元数据;
创建单元,用于使用所述目标函数的元数据,创建复制函数,所述元数据用于描述目标函数的属性信息,所述属性信息包括:存储位置、历史数据和文件记录中的至少一种;
设置单元,用于获取所述目标函数的函数体,将所述函数体设置到创建的所述复制函数中,所述函数体用于表示所述复制函数的具体实现。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710841734.6/1.html,转载请声明来源钻瓜专利网。