[发明专利]函数动态调用方法和装置有效
申请号: | 201610875839.9 | 申请日: | 2016-09-30 |
公开(公告)号: | CN108304191B | 公开(公告)日: | 2021-06-01 |
发明(设计)人: | 朱琛 | 申请(专利权)人: | 龙芯中科技术股份有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京同立钧成知识产权代理有限公司 11205 | 代理人: | 杨文娟;刘芳 |
地址: | 100095 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 函数 动态 调用 方法 装置 | ||
1.一种函数动态调用方法,其特征在于,包括:
在执行编译完成的汇编语言时,获取打包消息;所述打包消息中包括执行函数,所述执行函数中包括至少一个参数;
根据函数调用约定应用程序二进制接口ABI方式,将所述至少一个参数进行存储;
确定所述执行函数当前的执行位置处的地址;
调用并执行与所述执行函数对应的被调用函数,确定所述被调用函数的返回值;
根据所述执行位置处的地址返回至所述执行函数的执行位置处以继续执行所述执行函数的执行位置后的程序,并保存所述返回值。
2.根据权利要求1所述的方法,其特征在于,所述根据函数调用约定ABI方式,将所述至少一个参数进行存储,包括:
若所述执行函数中的参数个数N小于等于M,则将N个参数存放入第一寄存器中;
若所述执行函数中的参数个数N大于M,则将N个参数中的M个参数,存放入第一寄存器中,将N-M个参数依次存放入第一栈中;
其中,N、M为正整数。
3.根据权利要求1所述的方法,其特征在于,所述调用并执行与所述执行函数对应的被调用函数,包括:
根据所述执行函数的中的调用参数,确定与所述调用参数对应的所述被调用函数;
获取所述被调用函数的地址,并根据所述被调用函数的地址确定所述被调用函数的位置;
调用与并执行所述被调用函数。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述保存所述返回值,包括:
确定所述返回值的字节个数;
若所述返回值的字节个数小于等于预设字节个数,则将所述返回值保存至第二寄存器中;
若所述返回值的字节个数大于预设字节个数,则将所述返回值保存至第二栈中,并将所述第二栈的地址保存至所述第二寄存器中。
5.一种函数动态调用装置,其特征在于,包括:
获取模块,用于在执行编译完成的汇编语言时,获取打包消息;所述打包消息中包括执行函数,所述执行函数中包括至少一个参数;
存储模块,用于根据函数调用约定应用ABI方式,将所述至少一个参数进行存储;
确定模块,用于确定所述执行函数当前的执行位置处的地址;
调用模块,用于调用并执行与所述执行函数对应的被调用函数,确定所述被调用函数的返回值;
返回模块,用于根据所述执行位置处的地址返回至所述执行函数的执行位置处以继续执行所述执行函数的执行位置后的程序,并保存所述返回值。
6.根据权利要求5所述的装置,其特征在于,所述存储模块,包括:
第一存放子模块,用于若所述执行函数中的参数个数N小于等于M,则将N个参数存放入第一寄存器中;
第二存放子模块,用于若所述执行函数中的参数个数N大于M,则将N个参数中的M个参数,存放入第一寄存器中,将N-M个参数依次存放入第一栈中,其中,N、M为正整数。
7.根据权利要求5所述的装置,其特征在于,所述调用模块,具体用于:
根据所述执行函数的中的调用参数,确定与所述调用参数对应的所述被调用函数;
获取所述被调用函数的地址,并根据所述被调用函数的地址确定所述被调用函数的位置;
调用与并执行所述被调用函数,确定所述被调用函数的返回值。
8.根据权利要求5-7任一项所述的装置,其特征在于,所述返回模块,包括:
返回子模块,用于根据所述执行位置处的地址返回至所述执行函数的执行位置处;
确定子模块,用于确定所述返回值的字节个数;
第一保存模块,用于若所述返回值的字节个数小于等于预设字节个数,则将所述返回值保存至第二寄存器中;
第二保存模块,用于若所述返回值的字节个数大于预设字节个数,则将所述返回值保存至第二栈中,并将所述第二栈的地址保存至所述第二寄存器中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于龙芯中科技术股份有限公司,未经龙芯中科技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610875839.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:网络店铺生成方法及装置
- 下一篇:一种自动生成CAN交互层代码的方法及系统