在动态二进制翻译系统中处理间接转移指令的方法和装置与流程

文档序号:12718678阅读:216来源:国知局
在动态二进制翻译系统中处理间接转移指令的方法和装置与流程

本发明涉及计算机应用领域,尤其涉及一种在动态二进制翻译系统中处理间接转移指令的方法和装置。



背景技术:

动态二进制翻译技术(dynamic translation)广泛应用于指令系统模拟,二进制插桩,动态优化,程序行为分析等领域。在大多数应用场景下,性能是翻译系统需考虑的重要指标。其中,控制转移指令的处理方法是影响动态翻译系统性能的重要因素。控制转移指令一般可分为条件转移,直接跳转与间接转移。对于转移目标固定的条件转移指令与直接跳转指令,翻译系统可使用代码块链接技术来降低开销。

而间接转移指令(IB:Indirect Branch)的转移目标在运行时才可以确定,且转移目标不固定,因此每次执行时均需进行一次源程序计数器地址(SPC:Source Program Counter address,简称源地址)到目标程序计数器地址(TPC:Target Program Counter address,简称目标地址)的地址转换操作,导致了巨大的性能开销,使得间接转移指令的处理过程成为系统性能开销的主要来源。

图1为现有技术中动态翻译系统处理间接转移指令的流程示意图。在获取到转移目标的源地址(SPC)时,翻译系统会进入一个PC分发器(Dispatcher),将源地址转换为目标地址(TPC)。翻译系统一般会维护一个SPC-TPC的映射表,在源地址产生后,运行一个Hash查表例程来进行地址转换,然后再跳转至相应的目标地址。但进行一次Hash查表需要10条以上指令,导致较大的开销。软件预测法可以一定程度上避免Hash查表开销,即在转移目标的SPC产生后,进行若干次的比较-跳转的预测操作,若预测成功则直接跳转。但软件预测法的预测准确率一般较低,制约了其对整体性能的提升。

此外,还出现了一些软硬件协同的优化方案,如在CPU流水线中新增一个跳转地址查找表,或者新增一个按内容访问的相联存储器(CAM:content-associated memory),但这些方案均需改动硬件或指令系统,通用性较差,无法在已有平台上实现。

在动态二进制翻译系统中,当间接转移指令的转移目标产生时,如何实时进行一次源地址到目标地址的转换需要提供一种新的技术方案。。



技术实现要素:

本发明提供一种在动态二进制翻译系统中处理间接转移指令的方法和系统,要解决的技术问题是如何提升动态二进制翻译系统的性能。

为解决上述技术问题,本发明提供了一种在动态二进制翻译系统中处理间接转移指令的方法,包括:

保存用于在动态二进制翻译系统中处理间接转移指令的重定向表;

当接收到间接转移指令时,根据间接转移指令中的源地址在所保存的重定向表中查找该源地址对应的表项;所述重定向表以源地址为索引建立;

如果查找到的表项为空,则在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;

如果查找到的表项中包含重定向信息,则执行所述重定向信息,将程序控制流重定向至相应的目标地址处。

可选地,所述重定向表复用源二进制代码空间存储,或单独存储在一块与源二进制代码空间具有一个固定偏移量的影子空间中;

所述在重定向表中查找该源地址对应的表项的步骤包括:

若重定向表存储在源二进制代码空间中,则直接查找所述源地址所代表的存储位置中的表项;

若重定向表存储在影子空间中,则在所述影子空间中,查找所述源地址加上所述的固定偏移量的结果所代表的存储位置中的表项。

可选地,如果所述动态二进制翻译系统的源平台是变长指令系统平台,则所述重定向表中的表项为链式表项,所述重定向信息为短跳转指令;

如果所述动态二进制翻译系统的源平台是定长指令系统平台,则所述重定向信息包括源地址相对应的目标地址。

可选地,所述的方法还包括:

当所述动态二进制翻译系统启动后,将源二进制代码空间或影子空间的页面标记为不可运行;当在页面填入一个表项后,在该页面其他位置填入软件中断指令;

所述如果查找到的表项为空,则在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息的步骤包括:

当页面中不包含表项且空白表项被执行时,触发页面权限异常,调用页面异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;

当页面已包含一个表项且空白表项被执行时,触发软件中断异常,调用软件中断异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息。

本发明还提供了一种在动态二进制翻译系统中处理间接转移指令的装置,包括:

存储单元,用于保存用于在动态二进制翻译系统中处理间接转移指令的重定向表;

查找单元,用于当接收到间接转移指令时,根据间接转移指令中的源地址在所述存储单元所保存的重定向表中查找该源地址对应的表项;所述重定向表以源地址为索引建立;

写入单元,用于当查找到的表项为空时,在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;

执行单元,用于当查找到的表项中包含重定向信息时,执行所述重定向信息,将程序控制流重定向至相应的目标地址处。

可选地,所述存储单元复用源二进制代码空间保存所述重定向表,或将所述重定向表单独存储在一块与源二进制代码空间具有一个固定偏移量的影子空间中;

所述查找单元在重定向表中查找该源地址对应的表项是指:

若重定向表存储在源二进制代码空间中,所述查找单元直接查找所述源地址所代表的存储位置中的表项;若重定向表存储在影子空间中,所述查找单元在所述影子空间中查找所述源地址加上所述固定偏移量的结果所代表的存储位置中的表项。

可选地,如果所述动态二进制翻译系统的源平台是变长指令系统平台,则所述重定向表中的表项为链式表项,所述重定向信息为短跳转指令;

如果所述动态二进制翻译系统的源平台是定长指令系统平台,则所述重定向信息包括源地址相对应的目标地址。

可选地,所述的装置还包括:

按需构造单元,用于当所述动态二进制翻译系统启动后,将源二进制代码空间或影子空间的页面标记为不可运行;当在页面填入一个表项后,在该页面其他位置填入软件中断指令;

所述写入单元当查找到的表项为空时,在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息是指:

所述写入单元当页面中不包含表项且空白表项被执行时,触发页面权限异常,调用页面异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;当页面已包含一个表项且空白表项被执行时,触发软件中断异常,调用软件中断异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息。

与现有技术相比,本发明的至少一个实施例通过在动态二进制翻译系统运行过程中实时建立一个重定向表来处理间接转移指令,在处理间接转移指令时无需对转移目标进行地址转换,可直接跳转至源地址,再由该源地址对应的重定向信息将控制流定向至相应的目标地址,无需进行任何计算便可直接跳转,避免了在处理该类指令时进行地址转换操作;而且不需要新增硬件或改动指令系统,可用于绝大部分动态二进制翻译系统中,以少量内存冗余为代价优化了间接转移指令的处理过程,可大幅提升翻译系统的整体性能。

本发明的又一个实施例采用两层粒度的基于异常的按需构造方法建立所述重定向表,系统启动时整个表为空白表,各个表项第一次被使用时填入重定向信息,采用基于异常机制的方法来保证空白表项不会被使用。本发明的又一个实施例复用源二进制代码地址空间来建立重定向表,无需额外分配大量内存。本发明的又一个实施例使用影子空间(Shadow Space)的方法来保护被覆盖的源二进制代码,将重定向表存储在影子空间中,使得系统在存在自修改代码(Self-modifying Code)的情况下依然可以正确执行。本发明的又一个实施例使用在线剖析技术,仅对热点指令进行优化,以减少内存占用。

附图说明

图1为现有技术中动态翻译系统处理间接转移指令的流程示意图;

图2为实施例一的在动态二进制翻译系统中处理间接转移指令的方法的流程示意图;

图3为实施例一的在动态二进制翻译系统中处理间接转移指令的方法中信号转移的示意图;

图4a是实施例一在一种变长指令系统平台(x86)上的实现示意图;

图4b是图4a的实现方式中影子空间的跳转示意图;

图5是实施例一在一种定长指令系统平台(ARM)上的实现示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步的详细描述。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

实施例一、一种在动态二进制翻译系统中处理间接转移指令的方法,如图2所示,包括:

201、保存用于在动态二进制翻译系统中处理间接转移指令的重定向表;当接收到间接转移指令时,根据间接转移指令中的源地址在所保存的重定向表中查找该源地址对应的表项;所述重定向表以源地址为索引建立;

202、如果查找到的表项为空,则执行步骤203;如果查找到的表项中包含重定向信息,则执行步骤204;

203、在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;

204、执行所述重定向信息,将程序控制流重定向至相应的目标地址处。

图3为本实施例提供的在动态二进制翻译系统中处理间接转移指令的方法中信号转移的示意图。图3所示信号流向包括:

在获取到转移目标的SPC后,无需进入PC分发器进行地址转换,而直接跳转至SPC。SPC地址处原本存储的是源二进制指令,在经过表构造后,该地址成为一个重定向表表项,包含有一段重定向信息,可以但不限于为跳板代码(Jump to$TPC),可将程序控制流重定向至相应的TPC处。

本实施例中,各个表项第一次被使用时填入重定向信息,随着使用时间增加,表项中记录的源地址以及该源地址对应的重定向信息也会增加;在所有表项均被填入后,重定向表进入稳定工作状态,翻译系统在遇到间接转移指令时可直接跳转至源地址,已预设好的表项会将程序控制流重定向至正确的目标地址。这样使得翻译系统在遇到间接转移指令时,无需进行地址转换操作,可直接跳转至源地址,避免了在处理该类指令时进行地址转换操作,在该机制的支持下,处理一次间接转移所需的指令条数可从10条降为2~6条,从而大幅提升翻译系统的整体性能。

本实施例的一种实施方式中,根据间接转移指令中的源地址在所保存的重定向表中查找该源地址对应的表项之前还可以包括:

判断接收到间接转移指令是否为热点间接转移指令;所述热点间接转移指令是指执行次数达到预定阈值的间接转移指令;

如果是,再对其使用重定向表技术。

本实施方式中,可以但不限于采用在线剖析技术确定热点间接转移指令,即在系统中加入一段剖析代码,实时监测间接转移指令的执行次数。剖析的目的是为了确定该间接转移指令是否为热点间接转移指令。由于重定向表具有一定的“启动开销”,因此只有热点间接转移指令才会使用重定向表技术,多次执行后可将启动开销平摊至忽略不计。对于非热点间接转移指令,则可使用已有的其他处理方法。

本实施例的一种实施方式中,所述重定向表复用源二进制代码空间,稀疏的分布在源二进制代码空间中。

本实施方式复用源二进制代码空间建立源地址索引的重定向表(Redirecting Table),不需要额外占用大量内存。

本实施例的一种实施方式中,在无法使用页表机制保护被覆盖的源二进制代码时,所述重定向表单独存储在一块与源二进制代码空间具有一个固定偏移量的影子空间中;

本实施例的一种实施方式中,所述在重定向表中查找该源地址对应的表项的步骤包括:

若重定向表存储在源二进制代码空间中,则直接查找所述源地址所代表的存储位置中的表项;

若重定向表存储在影子空间中,则在所述影子空间中查找所述源地址加上所述固定偏移量的结果所代表的存储位置中的表项。

本实施方式中,为保护被覆盖的源二进制代码,将所述重定向表存储在影子空间中,使得系统在存在自修改代码(Self-modifying Code)的情况下依然可以正确执行。

本实施例的一种实施方式中,所述的方法还可以包括:

当所述动态二进制翻译系统启动后,将源二进制代码空间或影子空间的页面标记为不可运行;当在页面填入一个表项后,在该页面其他位置填入软件中断指令;

所述如果查找到的表项为空,则在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息的步骤包括:

当页面中不包含表项且空白表项被执行时,触发页面权限异常,调用页面异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;

当页面已包含一个表项且空白表项被执行时,触发软件中断异常,调用软件中断异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息。

本实施方式中,重定向表采用两层粒度的基于异常(Exception)的按需(On Demand)构造方法。首先是页面级粒度,翻译系统在启动后将整个源二进制地址空间的页面标记为不可运行,当空白表项被执行时,会触发一个页面权限异常,异常处理函数将负责填入相应表项。然后是指令级粒度,在页面已包含一个表项时,该页面其他位置将被填入软件中断指令,当空白表项被执行时,会触发一个软件中断异常,异常处理函数将负责填入相应表项。由此可以看出,所述表项采用两层粒度基于异常进行构造,不需要离线分析过程,利用页保护机制和软件中断指令来保证空白表项不会被执行。

本实施例的一种实施方式中,如果所述动态二进制翻译系统的源平台是变长指令系统平台,则所述重定向表中的表项为链式表项,所述重定向信息为短跳转指令;

如果所述动态二进制翻译系统的源平台是定长指令系统平台,则所述重定向信息包括源地址相对应的目标地址。

图4a是本实施例在一种变长指令系统平台(x86)上的实现方式的示意图,采用了影子空间放置所述重定向表。在源二进制指令太短,无法容纳重定向表表项时,采用了一种链式表项(Entry Chain)的方法,如图4b所示,可利用短跳转指令将控制流重定向至合适的位置。

图5是本实施例在一种定长指令系统平台(ARM)上的变化版本的示意图。在此变化版本中,重定向表表项不再存储跳板代码(Jump to$TPC),而是直接存储TPC值,系统可直接读取该表项获取相应的目标地址。

实施例二、一种在动态二进制翻译系统中处理间接转移指令的装置,包括:

存储单元,用于保存用于在动态二进制翻译系统中处理间接转移指令的重定向表;

查找单元,用于当接收到间接转移指令时,根据间接转移指令中的源地址在所述存储单元所保存的重定向表中查找该源地址对应的表项;所述重定向表以源地址为索引建立;

写入单元,用于当查找到的表项为空时,在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;

执行单元,用于当查找到的表项中包含重定向信息时,执行所述重定向信息,将程序控制流重定向至相应的目标地址处。

本实施例的一种实施方式中,所述存储单元可以复用源二进制代码空间保存所述重定向表,将所述重定向表稀疏的分布在源二进制代码空间中。

本实施例的一种实施方式中,在无法使用页表机制保护被覆盖的源二进制代码时,所述存储单元将所述重定向表单独存储在一块与源二进制代码空间具有一个固定偏移量的影子空间中;

本实施例的一种实施方式中,所述查找单元在重定向表中查找该源地址对应的表项具体可以是指:

若重定向表存储在源二进制代码空间中,所述查找单元直接查找所述源地址所代表的存储位置中的表项;

若重定向表存储在影子空间中,所述查找单元在所述影子空间中查找所述源地址加上所述固定偏移量的结果所代表的存储位置中的表项。

本实施例的一种实施方式中,如果所述动态二进制翻译系统的源平台是变长指令系统平台,则所述重定向表中的表项为链式表项,所述重定向信息为短跳转指令;

如果所述动态二进制翻译系统的源平台是定长指令系统平台,则所述重定向信息包括源地址相对应的目标地址。

本实施例的一种实施方式中,所述的装置还可以包括:

按需构造单元,用于当所述动态二进制翻译系统启动后,将源二进制代码空间或影子空间的页面标记为不可运行;当在页面填入一个表项后,在该页面其他位置填入软件中断指令;

所述写入单元当查找到的表项为空时,在该表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息具体可以是指:

所述写入单元当页面中不包含表项且空白表项被执行时,触发页面权限异常,调用页面异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息;当页面已包含一个表项且空白表项被执行时,触发软件中断异常,调用软件中断异常处理函数在表项中填入将程序控制流重定向至所述源地址对应的目标地址处的重定向信息。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1