System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机,尤其涉及一种向前搜索空闲寄存器的方法、向前搜索空闲寄存器的装置、计算设备及存储介质。
技术介绍
1、随着计算机技术的发展,形成了多种不同的指令集架构。每一种cpu采用的指令集各不相同,且各有其特点和核心的应用领域。
2、通过不同的工具链,上层应用往往能实现跨指令集架构的兼容性。但是在二进制层面,各架构的应用程序各不相同,具体地,应用程序的安全性、有效性、执行效率等关键问题在各架构上的表现不同,处理方式不同,因此,需要从二进制层面对应用程序进行分析,才能找到应用程序的问题的根源,从二进制层面入手才能从根源解决这些问题。其中,在对应用程序进行二进制分析时,通常需要分析一段二进制指令中寄存器的使用情况,以便为后续问题的分析提供基础。
3、为此,需要一种向前搜索空闲寄存器的方法,以解决上述技术方案中存在的问题。
技术实现思路
1、为此,本专利技术提供一种向前搜索空闲寄存器的方法和向前搜索空闲寄存器的装置,以解决或至少缓解上面存在的问题。
2、根据本专利技术的一个方面,提供一种向前搜索空闲寄存器的方法,在计算设备中执行,所述计算设备的操作系统上运行有应用程序,所述方法包括:确定存放有当前pc指针的当前搜索指针递减后得到的前一搜索指针,获取所述前一搜索指针指向的前一条指令地址,以便以当前pc指针指向的所述应用程序的当前指令地址为搜索起点向前搜索空闲寄存器;基于所述前一条指令地址获取前一条指令,确定所述前一条指令的指令类型;如果所述指令类
3、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,获取前一搜索指针指向的前一条指令地址,包括:判断所述前一搜索指针是否超出预定搜索范围;如果不超出预定搜索范围,则获取所述前一搜索指针指向的前一条指令地址。
4、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,如果所述前一搜索指针超出预定搜索范围,则输出所述应用程序的当前上下文的所有空闲寄存器位图,并终止搜索。
5、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,根据所述通用寄存器操作指令确定已使用寄存器,并确定未使用的空闲寄存器,包括:获取基于所述通用寄存器操作指令操作的通用寄存器号,将所述通用寄存器号对应的通用寄存器确定为新增的已使用寄存器,并将所述新增的已使用寄存器的标志位设置为已使用;将标志位未设置为已使用的各个通用寄存器,分别确定为未使用的空闲寄存器。
6、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,还包括:确定上一次保存的空闲寄存器的数量并减1,得到更新后的未使用的空闲寄存器的数量;如果所述更新后的未使用的空闲寄存器的数量不为0,则确定前一搜索指针递减后得到的前二搜索指针,并获取前二搜索指针指向的前二条指令地址,基于所述前二条指令地址重复执行上述步骤;如果所述更新后的未使用的空闲寄存器的数量为0,则终止搜索。
7、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,检查前一条指令对应的前序指令序列的特征,以确定是否搜索到函数入口,包括:根据所述前一条指令对应的前序指令序列的特征,确定所述前一条指令对应的前序指令序列是否是保存和切换运行环境的指令序列;如果是,则确定搜索到函数入口。
8、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,确定所述前一条指令对应的前序指令序列是否是保存和切换运行环境的指令序列,包括:如果所述前一条指令对应的前序指令序列同时包含对栈帧指针ebp的压栈指令、从esp到ebp的转移指令、对ebp的减法指令,则确定所述前一条指令对应的前序指令序列是保存和切换运行环境的指令序列。
9、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,确定存放有当前pc指针的当前搜索指针递减后得到的前一搜索指针,获取前一搜索指针指向的前一条指令地址,包括:确定存放有当前pc指针的当前搜索指针减1后得到的前一搜索指针,获取前一搜索指针指向的前一条指令地址。
10、可选地,在根据本专利技术的向前搜索空闲寄存器的方法中,还包括:响应于未搜索到函数入口,确定前一搜索指针递减后得到的前二搜索指针,并获取前二搜索指针指向的前二条指令地址,基于所述前二条指令地址重复执行上述步骤。
11、根据本专利技术的一个方面,提供一种向前搜索空闲寄存器的装置,驻留在计算设备中,所述计算设备的操作系统上运行有应用程序,所述装置包括:获取单元,适于确定存放有当前pc指针的当前搜索指针递减后得到的前一搜索指针,获取所述前一搜索指针指向的前一条指令地址,以便以当前pc指针指向的所述应用程序的当前指令地址为搜索起点向前搜索空闲寄存器;第一确定单元,适于基于所述前一条指令地址获取前一条指令,确定所述前一条指令的指令类型;第二确定单元,如果所述指令类型是通用寄存器操作指令,所述第二确定单元适于根据所述通用寄存器操作指令确定已使用寄存器,并确定未使用的空闲寄存器;检查单元,如果所述指令类型不是通用寄存器操作指令,所述检查单元适于检查前一条指令对应的前序指令序列的特征,以确定是否搜索到函数入口;第三确定单元,适于响应于搜索到函数入口,基于所述函数入口确定所述应用程序的当前上下文的所有空闲寄存器。
12、根据本专利技术的一个方面,提供一种计算设备,包括:至少一个处理器;存储器,存储有程序指令,其中,程序指令被配置为适于由上述至少一个处理器执行,所述程序指令包括用于执行如上所述的向前搜索空闲寄存器的方法的指令。
13、根据本专利技术的一个方面,提供一种存储有程序指令的可读存储介质,当该程序指令被计算设备读取并执行时,使得该计算设备执行如上所述的向前搜索空闲寄存器的方法。
14、根据本专利技术的技术方案,提供了一种向前搜索空闲寄存器的方法,将指向应用程序的当前指令地址的当前pc指针存放在当前搜索指针中,对当前搜索指针递减(减1)可得到前一搜索指针,基于前一搜索指针指向的前一条指令地址可以获取前一条指令,这样可以以当前指令地址为搜索起点向前搜索空闲寄存器。如果前一条指令的指令类型是通用寄存器操作指令,可以根据通用寄存器操作指令确定已使用寄存器,进而能确定未使用的空闲寄存器。如果前一条指令的指令类型不是通用寄存器操作指令,通过检查前一条指令对应的前序指令序列的特征,确定是否搜索到函数入口,如果搜索到函数入口,可以基于函数入口确定应用程序的当前上下文的所有空闲寄存器。这样,根据本专利技术的技术方案,从应用程序的当前执行点开始向前搜索空闲寄存器,能够高效地确定当前上下文的开始位置到当前执行点的所有空闲寄存器,进而能够分析该应用程序中的指令的寄存器使用情况。
15、此外,通过设置预定搜索范围,可以灵活控制基于应用程序的当本文档来自技高网...
【技术保护点】
1.一种向前搜索空闲寄存器的方法,在计算设备中执行,所述计算设备的操作系统上运行有应用程序,所述方法包括:
2.如权利要求1所述的方法,其中,获取前一搜索指针指向的前一条指令地址,包括:
3.如权利要求2所述的方法,其中,还包括:
4.如权利要求1-3中任一项所述的方法,其中,根据所述通用寄存器操作指令确定已使用寄存器,并确定未使用的空闲寄存器,包括:
5.如权利要求4所述的方法,其中,还包括:
6.如权利要求1-5中任一项所述的方法,其中,检查前一条指令对应的前序指令序列的特征,以确定是否搜索到函数入口,包括:
7.如权利要求6所述的方法,其中,确定所述前一条指令对应的前序指令序列是否是保存和切换运行环境的指令序列,包括:
8.如权利要求1-7中任一项所述的方法,其中,确定存放有当前PC指针的当前搜索指针递减后得到的前一搜索指针,获取前一搜索指针指向的前一条指令地址,包括:
9.如权利要求1-8中任一项所述的方法,其中,还包括:
10.一种向前搜索空闲寄存器的装置,驻留在
11.一种计算设备,包括:
12.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-9中任一项所述方法。
...【技术特征摘要】
1.一种向前搜索空闲寄存器的方法,在计算设备中执行,所述计算设备的操作系统上运行有应用程序,所述方法包括:
2.如权利要求1所述的方法,其中,获取前一搜索指针指向的前一条指令地址,包括:
3.如权利要求2所述的方法,其中,还包括:
4.如权利要求1-3中任一项所述的方法,其中,根据所述通用寄存器操作指令确定已使用寄存器,并确定未使用的空闲寄存器,包括:
5.如权利要求4所述的方法,其中,还包括:
6.如权利要求1-5中任一项所述的方法,其中,检查前一条指令对应的前序指令序列的特征,以确定是否搜索到函数入口,包括:
7.如权利要求6所述的方法,其中...
【专利技术属性】
技术研发人员:钟俊,
申请(专利权)人:武汉深之度科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。