[发明专利]一种函数调用方法及装置有效
申请号: | 201710698756.1 | 申请日: | 2017-08-15 |
公开(公告)号: | CN107291480B | 公开(公告)日: | 2020-12-15 |
发明(设计)人: | 朱浩;张虎;曹新平 | 申请(专利权)人: | 中国农业银行股份有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F9/448 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 王雪;王宝筠 |
地址: | 100005 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 函数 调用 方法 装置 | ||
本发明公开一种函数调用方法及装置,所述方法包括:将待调用函数的源文件编译成二进制文件,二进制文件中包括数据段、代码段和文件头,文件头用于存储数据段和代码段的位置信息;将数据段、代码段和文件头加载入内存中,并记录内存地址;利用程序指针寄存器建立虚拟栈,并为所述虚拟栈分配内存;将所述待调用函数的参数,以二进制码流的形式写入所述虚拟栈,以便在所述待调用函数运行时从所述虚拟栈中调用所述参数;通过调用预设通用函数接口,利用所述虚拟栈,并依据所述内存地址,对所述待调用函数进行调用。本发明提供了一种通用的函数调用方法,能够自动化的完成函数的调用,提高了函数调用效率,且不需要操作人员具有计算机编程知识。
技术领域
本发明涉及数据处理领域,具体涉及一种函数调用方法及装置。
背景技术
在高级语言程序设计中,为了实现函数调用,需要对函数的接口信息进行分析,具体包括参数类型、参数入栈方向、参数传递模式等,完成对接口信息的分析后,针对该函数设计相应的调用模块。
由于不同的函数的接口信息一般不同,所以,现有技术的函数调用方法需要针对每个函数均进行接口信息的分析,并分别设计针对性的调用模块。由于不同的函数的接口信息不同,所以现有技术中需要分别针对每个函数的接口信息进行分析,另外,不同函数的参数传递模式也不同,反映出入栈的形式也不同,可能为了提高效率部分入栈还会采用寄存器,所以现有技术中还需要对不同函数的上述内容进行分析,分析过程复杂、困难,从而导致对函数的调用效率较低。
发明内容
本发明提供了一种函数调用方法及装置,能够自动化的完成函数的调用,提高了函数调用效率。
本发明实施例提供了一种函数调用方法,所述方法包括:
将待调用函数的源文件编译成二进制文件,所述二进制文件中包括数据段、代码段和文件头,所述文件头用于存储所述数据段和所述代码段的位置信息;
将所述数据段、所述代码段和所述文件头加载入内存中,并记录内存地址;
利用程序指针寄存器建立虚拟栈,并为所述虚拟栈分配内存;
将所述待调用函数的参数,以二进制码流的形式写入所述虚拟栈,以便在所述待调用函数运行时从所述虚拟栈中调用所述参数;
通过调用预设通用函数接口,利用所述虚拟栈,并依据所述内存地址,对所述待调用函数进行调用。
可选的,所述待调用函数为多个时,所述方法还包括:
将各个待调用函数的二进制文件中的数据段进行拼装,得到拼装后数据段;
将各个待调用函数的二进制文件中的代码段进行拼装,得到拼装后代码段;
获取拼装后文件,所述拼装后文件中包括所述拼装后数据段、所述拼装后代码段和文件头,所述文件头存储有所述拼装后数据段和所述拼装后代码段的位置信息;
相应的,所述将所述数据段、所述代码段和所述文件头加载入内存中,并记录内存地址,包括:
将所述拼装后数据段、所述拼装后代码段和所述文件头加载入内存,并记录内存地址。
可选的,所述为所述虚拟栈分配内存,包括:
利用系统内存分配函数,为所述虚拟栈动态分配内存;
或,
通过静态链接库或动态连接库占据内存,为所述虚拟栈静态分配内存。
可选的,所述方法应用于函数测试程序中。
可选的,所述通过调用预设通用函数接口,利用所述虚拟栈,并依据所述内存地址,对所述待调用函数进行调用之前,还包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国农业银行股份有限公司,未经中国农业银行股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710698756.1/2.html,转载请声明来源钻瓜专利网。