函数返回检测方法及装置制造方法及图纸

技术编号:36298332 阅读:45 留言:0更新日期:2023-01-13 10:13
本说明书实施例提供了函数返回检测方法及装置。该方法包括:在待检测程序的二进制代码中,基于被调用的第一函数的第一代码生成第二代码,第二代码包括先后顺序排列的第一指令、第二指令和第一代码的全部指令,第一指令用于调用该全部指令的首条指令,第二指令用于跳转到负责函数返回检测的第二函数的入口;在第一代码中将首条指令修改为第三指令,第三指令用于跳转到第二代码的入口。该方法可适用于区块链上的智能合约检测。区块链上的智能合约检测。区块链上的智能合约检测。

【技术实现步骤摘要】
函数返回检测方法及装置


[0001]本说明书实施例属于计算机
,尤其涉及函数返回检测方法及装置。

技术介绍

[0002]程序的代码(如二进制代码)中通常包括很多函数,该很多函数中存在具有调用关系的函数。其中,包含针对某个函数的调用点的函数,可称为该某个函数的调用者函数。实践中,为了对程序进行性能分析,如期望能够统计一个或多个被调用的函数的执行时间等,和/或为了避免隐私泄露等,一般需要对程序进行函数返回检测。

技术实现思路

[0003]本专利技术的目的在于提供函数返回检测方法及装置,能减小为实现函数返回检测而引起的性能开销。
[0004]本说明书第一方面提供一种函数返回检测方法,包括:在待检测程序的二进制代码中,基于被调用的第一函数的第一代码生成第二代码,所述第二代码包括先后顺序排列的第一指令、第二指令和所述第一代码的全部指令,所述第一指令用于调用所述全部指令的首条指令,所述第二指令用于跳转到负责函数返回检测的第二函数的入口;在所述第一代码中将首条指令修改为第三指令,所述第三指令用于跳转到所述第二代码的入口。
[0005]本说明书第二方面提供一种函数返回检测方法,包括:在待检测程序的二进制代码中,基于被调用的第一函数的第一代码生成第二代码,所述第二代码包括先后顺序排列的第一指令、第二指令、所述第一代码的部分指令和第六指令,所述部分指令包括所述第一代码的首条指令,所述第一指令用于调用该首条指令,所述第二指令用于跳转到负责函数返回检测的第二函数的入口,所述第六指令用于跳转到所述部分指令的最后一条指令在所述第一代码中的下一条指令;在所述第一代码中将首条指令修改为第三指令,所述第三指令用于跳转到所述第二代码的入口。
[0006]本说明书第三方面提供一种函数返回检测方法,包括:在待检测程序的二进制代码中,通过在第一函数的调用者函数中执行用于调用所述第一函数的入口的指令,调用所述第一函数;其中,所述第一函数当前的第一代码的首条指令是改写后的第三指令,所述第二代码包括先后顺序排列的第一指令、第二指令和所述第一函数原始的第一代码中全部指令的等价代码;执行所述当前的第一代码中的所述第三指令跳转到所述第二代码的入口;执行所述第二代码中的所述第一指令调用所述等价代码的首条指令,从而执行所述等价代码;在所述等价代码执行完后,执行所述第二代码中的所述第二指令跳转到负责函数返回检测的第二函数的入口,从而执行所述第二函数。
[0007]本说明书第四方面提供一种函数返回检测方法,包括:在待检测程序的二进制代码中,通过在第一函数的调用者函数中执行用于调用所述第一函数的入口的指令,调用所述第一函数;其中,所述第一函数当前的第一代码的首条指令是改写后的第三指令,所述第二代码包括先后顺序排列的第一指令、第二指令、所述第一函数原始的第一代码中部分指
令的等价代码和第六指令,所述部分指令包括所述原始的第一代码的首条指令;执行所述当前的第一代码中的所述第三指令跳转到所述第二代码的入口;执行所述第二代码中的所述第一指令调用所述等价代码的首条指令,从而执行所述等价代码;在所述等价代码执行完后,通过执行所述第二代码中的所述第六指令,跳转到所述等价代码的最后一条指令在所述当前的第一代码中的下一条指令,从而返回所述当前的第一代码继续执行;在所述当前的第一代码的最后一条指令执行完后,执行所述第二代码中的所述第二指令跳转到负责函数返回检测的第二函数的入口,从而执行所述第二函数。
[0008]本说明书第五方面提供一种函数返回检测装置,包括:代码生成单元,被配置成在待检测程序的二进制代码中,基于被调用的第一函数的第一代码生成第二代码,所述第二代码包括先后顺序排列的第一指令、第二指令和所述第一代码的全部指令,所述第一指令用于调用所述全部指令的首条指令,所述第二指令用于跳转到负责函数返回检测的第二函数的入口;指令修改单元,被配置成在所述第一代码中将首条指令修改为第三指令,所述第三指令用于跳转到所述第二代码的入口。
[0009]本说明书第五方面提供一种函数返回检测装置,包括:代码生成单元,被配置成在待检测程序的二进制代码中,基于被调用的第一函数的第一代码生成第二代码,所述第二代码包括先后顺序排列的第一指令、第二指令、所述第一代码的部分指令和第六指令,所述部分指令包括所述第一代码的首条指令,所述第一指令用于调用该首条指令,所述第二指令用于跳转到负责函数返回检测的第二函数的入口,所述第六指令用于跳转到所述部分指令的最后一条指令在所述第一代码中的下一条指令;指令修改单元,被配置成在所述第一代码中将首条指令修改为第三指令,所述第三指令用于跳转到所述第二代码的入口。
[0010]本说明书第七方面提供一种函数返回检测装置,包括:第一调用单元,被配置成在待检测程序的二进制代码中,通过在第一函数的调用者函数中执行用于调用所述第一函数的入口的指令,调用所述第一函数;其中,所述第一函数当前的第一代码的首条指令是改写后的第三指令,所述第二代码包括先后顺序排列的第一指令、第二指令和所述第一函数原始的第一代码中全部指令的等价代码;第一跳转单元,被配置成执行所述当前的第一代码中的所述第三指令跳转到所述第二代码的入口;第二调用单元,被配置成执行所述第二代码中的所述第一指令调用所述等价代码的首条指令,从而执行所述等价代码;第二跳转单元,被配置成在所述等价代码执行完后,执行所述第二代码中的所述第二指令跳转到负责函数返回检测的第二函数的入口,从而执行所述第二函数。
[0011]本说明书第八方面提供一种函数返回检测装置,包括:第一调用单元,被配置成在待检测程序的二进制代码中,通过在第一函数的调用者函数中执行用于调用所述第一函数的入口的指令,调用所述第一函数;其中,所述第一函数当前的第一代码的首条指令是改写后的第三指令,所述第二代码包括先后顺序排列的第一指令、第二指令、所述第一函数原始的第一代码中部分指令的等价代码和第六指令,所述部分指令包括所述原始的第一代码的首条指令;第一跳转单元,被配置成执行所述当前的第一代码中的所述第三指令跳转到所述第二代码的入口;第二调用单元,被配置成执行所述第二代码中的所述第一指令调用所述等价代码的首条指令,从而执行所述等价代码;第二跳转单元,被配置成在所述等价代码执行完后,通过执行所述第二代码中的所述第六指令,跳转到所述等价代码的最后一条指令在所述当前的第一代码中的下一条指令,从而返回所述当前的第一代码继续执行;第三
跳转单元,被配置成在所述当前的第一代码的最后一条指令执行完后,执行所述第二代码中的所述第二指令跳转到负责函数返回检测的第二函数的入口,从而执行所述第二函数。
[0012]本说明书第九方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行如第一方面至第四方面中任一实现方式描述的方法。
[0013]本说明书第十方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现如第一方面至第四方面中任一实现方式描述的方法。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种函数返回检测方法,包括:在待检测程序的二进制代码中,基于被调用的第一函数的第一代码生成第二代码,所述第二代码包括先后顺序排列的第一指令、第二指令和所述第一代码的全部指令,所述第一指令用于调用所述全部指令的首条指令,所述第二指令用于跳转到负责函数返回检测的第二函数的入口;在所述第一代码中将首条指令修改为第三指令,所述第三指令用于跳转到所述第二代码的入口。2.根据权利要求1所述的方法,其中,所述第二代码还包括第四指令,所述第四指令是所述第一指令的上一条指令,用于将所述第一代码的原始入口地址压栈。3.根据权利要求2所述的方法,还包括:当所述全部指令中存在包含对于函数调用参数的访问偏移量的指令时,在所述第二代码中对该指令中的所述访问偏移量进行修正。4.根据权利要求3所述的方法,其中,所述全部指令中包括第五指令,所述第五指令用于调整栈顶寄存器的值;以及所述方法还包括:对于所述全部指令中包含相对于栈顶寄存器的内存地址访问的偏移量的指令,若该偏移量超过所述第五指令中对栈顶寄存器的调整值,则确定该偏移量是对于函数调用参数的访问偏移量。5.根据权利要求1所述的方法,还包括:当所述全部指令中存在所采用的寻址方式为指令相对寻址的指令时,在所述第二代码中对该指令中的偏移量进行修正。6.根据权利要求1

5之一所述的方法,其中,所述第一指令属于call指令,所述第二指令和所述第三指令属于jmp指令。7.一种函数返回检测方法,包括:在待检测程序的二进制代码中,基于被调用的第一函数的第一代码生成第二代码,所述第二代码包括先后顺序排列的第一指令、第二指令、所述第一代码的部分指令和第六指令,所述部分指令包括所述第一代码的首条指令,所述第一指令用于调用该首条指令,所述第二指令用于跳转到负责函数返回检测的第二函数的入口,所述第六指令用于跳转到所述部分指令的最后一条指令在所述第一代码中的下一条指令;在所述第一代码中将首条指令修改为第三指令,所述第三指令用于跳转到所述第二代码的入口。8.根据权利要求7所述的方法,其中,所述第二代码还包括第四指令,所述第四指令是所述第一指令的上一条指令,用于将所述第一代码的原始入口地址压栈。9.根据权利要求8所述的方法,还包括:当所述部分指令中存在包含对于函数调用参数的访问偏移量的指令时,在所述第二代码中对该指令中的所述访问偏移量进行修正。10.根据权利要求8所述的方法,还包括:对于所述第一代码中除所述部分指令以外的任意指令,若该指令包含对于函数调用参数的访问偏移量,则在所述第一代码中对该指令中的所述访问偏移量进行修正。
11.根据权利要求7所述的方法,其中,所述部分指令均为所述第一代码中因原始首条指令要被改写为所述第三指令而在内存中会被覆盖的指令。12.一种函数返回检测方法,包括:在待检测程序的二进制代码中,通过在第一函数的调用者函数中执行用于调用所述第一函数的入口的指令,调用所述第一函数;其中,所述第一函数当前的第一代码的首条指令是改写后的第三指令,所述第二代码包括先后顺序排列的第一指令、第二指令和所述第一函数原始的第一代码中全部指令的等价代码;执行所述当前的第一代码中的所述第三指令跳转到所述第二代码的入口;执行所述第二代码中的所述第一指令调用所述等价代码的首条指令,从而执行所述等价代码;在所述等价代码执行完后,执行所述第二代码中的所述第二指令跳转到负责函数返回检测的第二函数的入口,从而执行所述第二函数。13.一种函数返回检测方法,包括:在待检测程序的二进制代码中,通过在第一函数的调用者函数中执行用于调用所述第一函数的入口的指令,调用所述第一函数;其中,所述第一函数当前的第一代码的首条指令是改写后的第三指令,所述第二代码包括先后顺序排列的第一指令、第二指令、所述第一函数原始的第一代码中部分指令的等价代码和第六指令,所述部分指令包括所述原始的第一代码的首条指令;执行所述当前的第一代码中的所述第...

【专利技术属性】
技术研发人员:刘晓建
申请(专利权)人:蚂蚁区块链科技上海有限公司
类型:发明
国别省市:

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

1