[发明专利]基于二进制翻译自修改代码检测方法和装置有效
申请号: | 201711005571.4 | 申请日: | 2017-10-25 |
公开(公告)号: | CN109710267B | 公开(公告)日: | 2022-02-08 |
发明(设计)人: | 康烁 | 申请(专利权)人: | 康烁 |
主分类号: | G06F8/52 | 分类号: | G06F8/52;G06F12/1027 |
代理公司: | 北京卓岚智财知识产权代理事务所(特殊普通合伙) 11624 | 代理人: | 任漱晨 |
地址: | 100085 北京市海淀区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 二进制 翻译 修改 代码 检测 方法 装置 | ||
本发明公开了一种基于二进制翻译自修改代码检测方法和装置。该方法包括在执行本地代码的过程中,检测待执行的代码所指示执行的操作是否为写操作,其中,上述本地代码包括对接收到的指令执行翻译操作得到的代码;若上述待执行的代码所指示执行的操作为上述写操作,则查询指令页表缓存中是否存在上述写操作的虚拟地址映射,其中,上述虚拟地址映射用于记录上述接收到的指令的虚拟地址和物理地址的页号的对应关系,上述指令页表缓存中存储有在执行上述翻译操作的过程中得到的上述虚拟地址映射;若查询到指令页表缓存中存在写操作的虚拟地址映射,则确定上述写操作为自修改代码操作。通过本发明,可以提高自修改代码的检测和重新翻译的效率。
技术领域
本发明涉及计算机技术领域,具体而言,特别涉及基于二进制翻译自修改代码检测方法和装置。
背景技术
自修代码检测是二进制翻译研究中的一个难点,采用二进制翻译时会引起潜在的问题,因为实际执行的代码是翻译的代码而不是最初的源代码。如果最初的源代码有对自身的写操作,那么翻译版本必须产生完全相同的结果。运行时软件必须正确地仿真这种自修改代码的实例。
现有方法是把最初的源代码区域被运行时软件写保护。对于所有的包含被翻译源代码的页来说,其页级写访问权限被关闭了。这可以通过有运行时软件产生的系统调用来实现。因此,任何尝试对一个包含翻译代码的页的写操作都会导致保护陷阱,并将信号传递给运行时软件。在这时,运行时软件将会清除整个cache或仅仅清除被修改的页相对应的翻译(通过使用索引表来跟踪翻译代码块源自哪个页)。然后,运行时软件临时允许向代码区域内写操作,然后进入到翻译模式,接着向前翻译,至少到它到达触发故障的代码块为止。当代码块修改其自身的时候,二进制翻译保证向前进行。那么运行时软件可以重新启用写保护,并且继续正常的操作,这最终导致重新翻译被修改页中的代码。因此,现有的检测方法是一种高开销方法,执行效率低。
针对现有技术中存在的目标处理器执行自修改代码检测性能低的问题,目前尚未提出有效的解决方法。
发明内容
本发明的主要目的在于提供一种基于二进制翻译自修改代码检测方法和装置,以解决现有技术中的目标处理器执行自修改代码检测性能低的问题。
依据本发明的一个方面,提供了一种基于二进制翻译自修改代码检测的方法。
根据本发明的二进制翻译自修改代码检测方法包括:在执行本地代码的过程中,检测待执行的代码所指示执行的操作是否为写操作,其中,上述本地代码包括对接收到的指令执行翻译操作得到的代码;若上述待执行的代码所指示执行的操作为上述写操作,则查询指令页表缓存中是否存在上述写操作的虚拟地址映射,其中,上述虚拟地址映射用于记录上述接收到的指令的虚拟地址和物理地址的页号的对应关系,上述指令页表缓存中存储有在执行上述翻译操作的过程中得到的上述虚拟地址映射;若查询到上述指令页表缓存中存在上述写操作的虚拟地址映射,则确定上述写操作为自修改代码操作。
进一步地,在查询指令页表缓存中是否存在上述写操作的虚拟地址映射之后,上述方法还包括:在查询到上述指令页表缓存中存在上述写操作的虚拟地址映射之后,清空上述物理地址对应的页的本地代码翻译缓存,并将上述自修改代码操作产生的自修改的指令存到内存的代码段中,其中,上述页与上述页号一一对应;执行到被自修改的指令对应地址的本地代码时,重新翻译上述自修改的指令。
进一步地,在查询指令页表缓存中是否存在上述写操作的虚拟地址映射之后,上述方法还包括:若未查询到上述指令页表缓存中存在上述写操作的虚拟地址映射,则确定上述写操作为写数据操作,将上述写数据操作的虚拟地址作为索引,在页表中查询上述索引对应的物理地址,并且把上述写数据操作的虚拟地址和对应的上述物理地址的页号插入到数据页表缓存中,直接把数据写入到内存中存储。
进一步地,在执行本地代码之前上述方法还包括:申请指令页表缓存和数据页表缓存;初始化指令页表缓存和数据页表缓存。
依据本发明的另一个方面,提供了一种基于二进制翻译自修改代码检测装置。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于康烁,未经康烁许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711005571.4/2.html,转载请声明来源钻瓜专利网。