• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    二進制翻譯中間接跳轉指令的翻譯方法及其系統技術方案

    技術編號:4251566 閱讀:364 留言:0更新日期:2012-04-11 18:40
    本發明專利技術涉及二進制翻譯中間接跳轉指令的翻譯方法及系統,方法包括:步驟1,在反匯編到間接跳轉指令時,根據反匯編出的源指令序列判斷所述間接跳轉指令是否為多分支語句或虛函數調用,如果是則進行標記,獲得被標記的間接跳轉指令的源跳轉表;步驟2,在翻譯時,將被標記的間接跳轉指令翻譯為根據待構建的所述被標記的間接跳轉指令的目標跳轉表的內容進行跳轉的指令,為所述目標跳轉表預留重定位項;步驟3,翻譯完所述被標記的間接跳轉指令后,根據所述間接跳轉指令的源跳轉表構建所述間接跳轉指令的目標跳轉表;步驟4,將構建的所述目標跳轉表的地址寫入所述重定位項。本發明專利技術能夠減少了訪問內存的開銷,提高了二進制翻譯的效率。

    【技術實現步驟摘要】

    本專利技術涉及的是計算機領域中二進制翻譯領域,尤其涉及二進制翻譯中間接跳轉指令的翻譯方法及其系統
    技術介紹
    二進制翻譯器功能是將一種指令集體系結構(ISA)上的可執行程序翻譯到另一 種ISA上執行。當源機器和目標機器的ISA不同時,可以實現不同機器間的代碼遷移。該 項技術可以用于解決遺產代碼的移植,為某一處理器提供更加豐富的軟件資源等。當ISA 相同時,該項技術可以用于實現動態優化和軟件插樁等。另外在虛擬機系統的實現中,存在 一個關鍵步驟就是二進制翻譯。上述開發過程中,均會面臨的問題為如何高效地處理程序 中存在的間接跳轉指令。 間接跳轉指令不同于普通的跳轉指令,它的跳轉目標地址只有在運行的時刻才能 夠獲得。例如Intel X86體系結構上間接跳轉指令的格式如下所示。 FF/4 JMP r/ml6 Jump near,absolute indirect, address given in r/ml6 FF/4 JMP r/m32 Jump near,absolute indirect, address given in r/m32 FF/5 JMP ml6:16 Jump near, absolute indirect, address given in ml6:16 FF/4 JMP ml6:32 Jump near, absolute indirect, address given in ml6:32 可見,間接跳轉指令的操作數可能是寄存器,也可能是內存,該操作數指示的內存 地址中存放的內容即為要跳轉的目標地址。在二進制翻譯系統中,如何有效地翻譯上述間 接跳轉指令,從而達到較高的運行效率,成為現有技術中的一個問題。 現有技術中的方法是在內存中構造一個哈希表,該表記錄了源機器上跳轉目標地 址,簡稱為源PC,和相應的本地碼地址,簡稱為目標PC,的對應關系。當遇到間接跳轉指令 時,就生成查詢哈希表的代碼。如果查詢成功,就將對應的目標PC裝載到一個臨時寄存器, 跳轉到目標PC處繼續執行;如果查詢失敗,就返回到二進制翻譯器的運行時環境,并對源 PC處的代碼進行翻譯。翻譯完成后修改哈希表對應表項的內容,以備以后查詢。該方法在 每次執行間接跳轉指令時,都需要查詢哈希表,開銷太大。
    技術實現思路
    為解決上述問題,本專利技術提供了一種二進制翻譯中間接跳轉指令的翻譯方法及其系統,能夠減少了訪問內存的開銷,提高了 二進制翻譯的效率。本專利技術公開了一種二進制翻譯中間接跳轉指令的翻譯方法,包括 步驟l,在反匯編到間接跳轉指令時,根據反匯編出的源指令序列判斷所述間接跳轉指令是否為多分支語句或虛函數調用,如果是則進行標記,獲得被標記的間接跳轉指令的源跳轉表; 步驟2,在翻譯時,將被標記的間接跳轉指令翻譯為根據待構建的所述被標記的間 接跳轉指令的目標跳轉表的內容進行跳轉的指令,為所述目標跳轉表預留重定位項; 步驟3,翻譯完所述被標記的間接跳轉指令后,根據所述間接跳轉指令的源跳轉表 構建所述間接跳轉指令的目標跳轉表; 步驟4,將構建的所述目標跳轉表的地址寫入所述重定位項。 所述步驟l進一步為, 步驟21,在反匯編到間接跳轉指令時,根據反匯編出的源指令序列判斷所述間接 跳轉指令是否為多分支語句或虛函數調用,如果是,則對所述間接跳轉指令進行標記; 步驟22,獲得所述被標記的間接跳轉指令的源跳轉表的大小,所述源跳轉表中記載的各個跳轉目標地址,記錄計算所述源跳轉表索引的指令。 所述步驟2進一步為, 步驟31,翻譯所述計算源跳轉表的索引的指令,在索引所述目標跳轉表時使用所 述索引; 步驟32,將被標記的間接跳轉指令翻譯為根據所述索引從待構建的所述間接跳轉 指令的目標跳轉表中獲得對應表項,并按所述表項的內容進行跳轉的指令; 步驟33,為所述目標跳轉表預留重定位項。 所述步驟3進一步為, 步驟41,翻譯完所述被標記的間接跳轉指令后,構建目標跳轉表的大小同源跳轉 表的大小相同; 步驟42,判斷源跳轉表的表項中的跳轉地址是否已被翻譯并生成對應的本地碼, 如果是,執行步驟43,否則,執行步驟44 ; 步驟43,將所述對應的本地碼的入口地址填入所述目標跳轉表對應的表項中; 步驟44,將所述目標跳轉表對應的表項填為跳轉到翻譯控制器的代碼入口地址。 所述步驟1和所述步驟2之間還包括 步驟51 ,將被標記的間接跳轉指令的翻譯中取源跳轉表表項內容的指令對應生成 的本地碼移到跳轉寄存器指令之后; 所述步驟3進一步為, 步驟51,翻譯完所述被標記的間接跳轉指令后,構建目標跳轉表的大小同源跳轉 表的大小相同; 步驟52,判斷源跳轉表的表項中的跳轉地址是否已被翻譯并生成對應的本地碼, 如果是,執行步驟53,否則,執行步驟54 ; 步驟53,將所述對應的本地碼的入口地址填入所述目標跳轉表對應的表項中; 步驟54,將所述目標跳轉表對應的表項填為所述跳轉寄存器指令的下一條指令的 地址。 所述步驟2還包括,對于未被標記的間接跳轉指令,按查找哈希表的方法進行翻 譯。 本專利技術還公開了一種二進制翻譯中間接跳轉指令的翻譯系統,包括 間接跳轉指令標識模塊,用于在反匯編到間接跳轉指令時,根據反匯編出的源指令序列判斷所述間接跳轉指令是否為多分支語句或虛函數調用,如果是則進行標記,獲得被標記的間接跳轉指令的源跳轉表; 翻譯模塊,用于在翻譯時,將被標記的間接跳轉指令翻譯為根據待構建的所述被標記的間接跳轉指令的目標跳轉表的內容進行跳轉的指令,為所述目標跳轉表預留重定位 項; 目標跳轉表構建模塊,用于在翻譯完所述被標記的間接跳轉指令后,根據所述間 接跳轉指令的源跳轉表構建所述間接跳轉指令的目標跳轉表; 所述翻譯模塊還用于將構建的所述目標跳轉表的地址寫入所述預留的重定位項, 完成翻譯。 所述間接跳轉指令標識模塊進一步用于在反匯編到間接跳轉指令時,根據反匯編 出的源指令序列判斷所述間接跳轉指令是否為多分支語句或虛函數調用,如果是,則對所 述間接跳轉指令進行標記;獲得所述被標記的間接跳轉指令的源跳轉表的大小,所述源跳 轉表中記載的各個跳轉目標地址,記錄計算所述源跳轉表索弓I的指令。 所述翻譯模塊在所述目標跳轉表被構建前進一步用于翻譯所述計算源跳轉表的 索引的指令,在索引所述目標跳轉表時使用所述索引;將被標記的間接跳轉指令翻譯為根 據所述索引從待構建的所述間接跳轉指令的目標跳轉表中獲得對應表項,并按所述表項的 內容進行跳轉的指令;為所述目標跳轉表預留重定位項。 所述目標跳轉表構建模塊進一步用于翻譯完所述被標記的間接跳轉指令后,構建 目標跳轉表的大小同源跳轉表的大小相同;判斷源跳轉表的表項中的跳轉地址是否已被翻 譯并生成對應的本地碼,如果是,將所述對應的本地碼的入口地址填入所述目標跳轉表對 應的表項中,否則,將所述目標跳轉表對應的表項填為跳轉到翻譯控制器的代碼入口地址。 所述系統在所述間接跳轉指令標識模塊和所述翻譯模塊之間還包括 指令修改模塊,用于將被標記的間接跳轉指令的翻譯中取源跳轉表表項內容的指 令對應生成的本地碼移到跳轉寄存器指令之后; 所述目標跳轉表構建模塊進一步用于翻譯完所述被標記的間接跳轉指令后,構建 目標跳轉表的大小同源跳轉表的大小相同;判斷源跳轉表的表項中的跳轉本文檔來自技高網
    ...

    【技術保護點】
    一種二進制翻譯中間接跳轉指令的翻譯方法,其特征在于,包括:    步驟1,在反匯編到間接跳轉指令時,根據反匯編出的源指令序列判斷所述間接跳轉指令是否為多分支語句或虛函數調用,如果是則進行標記,獲得被標記的間接跳轉指令的源跳轉表;    步驟2,在翻譯時,將被標記的間接跳轉指令翻譯為根據待構建的所述被標記的間接跳轉指令的目標跳轉表的內容進行跳轉的指令,為所述目標跳轉表預留重定位項;    步驟3,翻譯完所述被標記的間接跳轉指令后,根據所述間接跳轉指令的源跳轉表構建所述間接跳轉指令的目標跳轉表;    步驟4,將構建的所述目標跳轉表的地址寫入所述重定位項。

    【技術特征摘要】
    一種二進制翻譯中間接跳轉指令的翻譯方法,其特征在于,包括步驟1,在反匯編到間接跳轉指令時,根據反匯編出的源指令序列判斷所述間接跳轉指令是否為多分支語句或虛函數調用,如果是則進行標記,獲得被標記的間接跳轉指令的源跳轉表;步驟2,在翻譯時,將被標記的間接跳轉指令翻譯為根據待構建的所述被標記的間接跳轉指令的目標跳轉表的內容進行跳轉的指令,為所述目標跳轉表預留重定位項;步驟3,翻譯完所述被標記的間接跳轉指令后,根據所述間接跳轉指令的源跳轉表構建所述間接跳轉指令的目標跳轉表;步驟4,將構建的所述目標跳轉表的地址寫入所述重定位項。2. 如權利要求1所述的二進制翻譯中間接跳轉指令的翻譯方法,其特征在于, 所述步驟l進一步為,步驟21,在反匯編到間接跳轉指令時,根據反匯編出的源指令序列判斷所述間接跳轉 指令是否為多分支語句或虛函數調用,如果是,則對所述間接跳轉指令進行標記;步驟22,獲得所述被標記的間接跳轉指令的源跳轉表的大小,所述源跳轉表中記載的 各個跳轉目標地址,記錄計算所述源跳轉表索引的指令。3. 如權利要求2所述的二進制翻譯中間接跳轉指令的翻譯方法,其特征在于, 所述步驟2進一步為,步驟31,翻譯所述計算源跳轉表的索引的指令,在索引所述目標跳轉表時使用所述索引;步驟32,將被標記的間接跳轉指令翻譯為根據所述索引從待構建的所述間接跳轉指令 的目標跳轉表中獲得對應表項,并按所述表項的內容進行跳轉的指令; 步驟33,為所述目標跳轉表預留重定位項。4. 如權利要求2所述的二進制翻譯中間接跳轉指令的翻譯方法,其特征在于, 所述步驟3進一步為,步驟41,翻譯完所述被標記的間接跳轉指令后,構建目標跳轉表的大小同源跳轉表的 大小相同;步驟42,判斷源跳轉表的表項中的跳轉地址是否已被翻譯并生成對應的本地碼,如果 是,執行步驟43,否則,執行步驟44 ;步驟43,將所述對應的本地碼的入口地址填入所述目標跳轉表對應的表項中; 步驟44,將所述目標跳轉表對應的表項填為跳轉到翻譯控制器的代碼入口地址。5. 如權利要求2所述的二進制翻譯中間接跳轉指令的翻譯方法,其特征在于, 所述步驟1和所述步驟2之間還包括步驟51,將被標記的間接跳轉指令的翻譯中取源跳轉表表項內容的指令對應生成的本 地碼移到跳轉寄存器指令之后; 所述步驟3進一步為,步驟51,翻譯完所述被標記的間接跳轉指令后,構建目標跳轉表的大小同源跳轉表的 大小相同;步驟52,判斷源跳轉表的表項中的跳轉地址是否已被翻譯并生成對應的本地碼,如果 是,執行步驟53,否則,執行步驟54 ;步驟53,將所述對應的本地碼的入口地址填入所述目標跳轉表對應的表項中;步驟54,將所述目標跳轉表對應的表項填為所述跳轉寄存器指令的下一條指令的地址。6. 如權利要求1所述的二進制翻譯中間接跳轉指令的翻譯方法,其特征在于, 所述步驟2還包括,對于未被標記的間接跳轉指令,按查找哈希表的方法進行翻譯...

    【專利技術屬性】
    技術研發人員:武成崗,王文文,
    申請(專利權)人:中國科學院計算技術研究所,
    類型:發明
    國別省市:11[中國|北京]

    網友詢問留言 已有0條評論
    • 還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。

    1
    主站蜘蛛池模板: 亚洲熟妇av午夜无码不卡| 寂寞少妇做spa按摩无码| 无码国产精品一区二区免费16| 国产在线拍揄自揄拍无码| 精品亚洲AV无码一区二区| 久久久久成人精品无码| 无码福利一区二区三区| 国产亚洲精久久久久久无码AV | 亚洲欧洲自拍拍偷午夜色无码| 久久久久久亚洲Av无码精品专口| 青春草无码精品视频在线观| 人妻夜夜添夜夜无码AV| 国产亚洲?V无码?V男人的天堂| 国产福利无码一区在线| 高清无码中文字幕在线观看视频| 国产激情无码视频在线播放性色| 韩国无码AV片在线观看网站| 亚洲日韩精品A∨片无码加勒比| 亚洲AV永久纯肉无码精品动漫| 久久久无码精品亚洲日韩软件| 无码被窝影院午夜看片爽爽jk| 免费无码成人AV在线播放不卡| 亚洲国产精品无码专区| 亚洲精品无码午夜福利中文字幕 | 无码人妻精品一区二区蜜桃百度| 久久人妻无码中文字幕| 无码人妻久久一区二区三区免费| 亚洲精品无码久久不卡| 一本大道无码人妻精品专区| 国产AV天堂无码一区二区三区| 永久免费无码网站在线观看| 日韩免费a级毛片无码a∨| 亚洲AV无码成人精品区日韩| 精品久久久久久无码专区不卡| 亚洲av无码一区二区三区观看| 无码人妻AV免费一区二区三区| 日韩人妻无码一区二区三区99 | 亚洲熟妇av午夜无码不卡| 日韩欧精品无码视频无删节| 蜜桃无码一区二区三区| 一区二区三区无码被窝影院|