[发明专利]基于快速模拟器QEMU的分支指令抓取方法和装置有效
申请号: | 201611144953.0 | 申请日: | 2016-12-13 |
公开(公告)号: | CN108228239B | 公开(公告)日: | 2021-04-20 |
发明(设计)人: | 张立志;李策;高新博;汪文祥 | 申请(专利权)人: | 龙芯中科技术股份有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38;G06F9/455 |
代理公司: | 北京同立钧成知识产权代理有限公司 11205 | 代理人: | 杨泽;刘芳 |
地址: | 100095 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 快速 模拟器 qemu 分支 指令 抓取 方法 装置 | ||
1.一种基于快速模拟器QEMU的分支指令抓取方法,其特征在于,包括:
在QEMU执行获取待翻译指令时,判断当前所获取的待翻译指令是否为分支指令;
若是,则根据目标程序架构对当前的分支指令执行翻译操作,并将所述分支指令的属性信息进行存储;其中,所述分支指令的属性信息包括所述分支指令的操作码、所述分支指令的指令地址和所述分支指令的目标地址;
所述根据目标程序架构对当前的分支指令执行翻译操作,并将所述分支指令的属性信息进行存储,具体包括:
根据目标程序架构对当前的分支指令执行翻译操作,得到翻译分支指令;根据所述翻译分支指令所属的基本块中其他的翻译指令、所述翻译分支指令、所述当前的分支指令的属性信息得到翻译块,并将所述翻译块存储至缓存块表中;其中,所述缓存块表中包括至少一个翻译块,每个翻译块包括一条翻译分支指令;在所述QEMU从执行程序的第一条指令开始对执行程序中的指令逐条进行翻译操作时,所述基本块为所述第一条指令到分支指令之间的指令且包括所示分支指令对应的翻译指令;将所述分支指令的属性信息存储至分支指令抓取文件中;
所述判断当前所获取的待翻译指令是否为分支指令之前,所述方法还包括:
根据当前所获取的待翻译指令的地址,判断所述缓存块表中是否存在第一翻译块,所述第一翻译块为包含所述待翻译指令对应的翻译指令的翻译块;
若所述缓存块表中不存在所述第一翻译块,则判断当前所获取的待翻译指令是否为分支指令;
若所述缓存块表中存在所述第一翻译块,则获取所述第一翻译块中的分支指令的属性信息;将所述第一翻译块中的分支指令的属性信息存储至所述分支指令抓取文件中。
2.根据权利要求1所述的方法,其特征在于,所述将所述分支指令的属性信息存储至分支指令抓取文件中之后,所述方法还包括:
执行所述翻译块,获取下一条待翻译指令的地址;
判断所述下一条待翻译指令是否为分支指令,直至待翻译程序中的每一条待翻译指令均执行翻译操作为止。
3.根据权利要求1所述的方法,其特征在于,若所述缓存块表中不存在所述第一翻译块,则在判断当前所获取的待翻译指令是否为分支指令之前,所述方法还包括:
根据tb-fast_slow函数查询主机的物理内存,判断所述主机的物理内存中是否存在所述第一翻译块;
若所述主机的物理内存中不存在所述第一翻译块,则判断当前所获取的待翻译指令是否为分支指令。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若所述主机的物理内存中存在所述第一翻译块,则将所述第一翻译块存储至所述缓存块表中;
获取所述第一翻译块中的分支指令的属性信息;
将所述第一翻译块中的分支指令的属性信息存储至所述分支指令抓取文件中。
5.根据权利要求1或4所述的方法,其特征在于,所述将所述第一翻译块中的分支指令的属性信息存储至所述分支指令抓取文件中之后,所述方法还包括:
执行所述第一翻译块,获取下一条待翻译指令的地址;
判断所述下一条待翻译指令是否为分支指令,直至待翻译程序中的每一条待翻译指令均执行翻译操作为止。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
屏蔽QEMU中的tb_add_jump函数,以屏蔽所述QEMU中的直接块链机制。
7.一种基于快速模拟器QEMU的分支指令抓取装置,其特征在于,包括:判断模块、翻译存储模块、第一获取模块和第一存储模块,其中,
所述判断模块,用于在QEMU执行获取待翻译指令时,判断当前所获取的待翻译指令是否为分支指令;
所述翻译存储模块,用于在所述判断模块判断当前所获取的待翻译指令为分支指令时,根据目标程序架构对当前的分支指令执行翻译操作,得到翻译分支指令,并将所述分支指令的属性信息进行存储;其中,所述分支指令的属性信息包括所述分支指令的操作码、所述分支指令的指令地址和所述分支指令的跳转地址;
所述翻译存储模块,具体用于根据目标程序架构对当前的分支指令执行翻译操作,得到翻译分支指令,并根据所述翻译分支指令所属的基本块中其他的翻译指令、所述翻译分支指令、所述当前的分支指令的属性信息得到翻译块,并将所述翻译块存储至缓存块表中,以及将所述分支指令的属性信息存储至分支指令抓取文件中;其中,所述缓存块表中包括至少一个翻译块,每个翻译块包括一条翻译分支指令;在所述QEMU从执行程序的第一条指令开始对执行程序中的指令逐条进行翻译操作时,所述基本块为所述第一条指令到分支指令之间的指令且包括所示分支指令对应的翻译指令;
所述第一获取模块,用于在所述判断模块判断所述缓存块表中存在第一翻译块时,获取所述第一翻译块中的分支指令的属性信息;
所述第一存储模块,用于将所述第一翻译块中的分支指令的属性信息存储至所述分支指令文件中;
所述判断模块,还用于在判断当前所获取的待翻译指令是否为分支指令之前,根据当前所获取的待翻译指令的地址,判断所述缓存块表中是否存在第一翻译块,若所述缓存块表中不存在所述第一翻译块,则判断当前所获取的待翻译指令是否为分支指令;其中,所述第一翻译块为包含所述待翻译指令对应的翻译指令的翻译块。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于龙芯中科技术股份有限公司,未经龙芯中科技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611144953.0/1.html,转载请声明来源钻瓜专利网。