[發明專利]基于快速模擬器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.szxzyx.cn/pat/books/201611144953.0/1.html,轉載請聲明來源鉆瓜專利網。





