二進制翻譯是一種直接翻譯可執(zhí)行二進制程序的技術(shù)。
概念
二進制翻譯(Binary Translation)是一種直接翻譯可執(zhí)行二進制程序的技術(shù),能夠把一種處理器上的二進制程序翻譯到另外一種處理器上執(zhí)行。它使得不同處理器之間的二進制程序可以很容易地相互移植,擴大了硬件/軟件的適用范圍,有助于打破前面提到的處理器和支持軟件之間互相掣肘影響創(chuàng)新的局面.
種類
基于軟件的二進制翻譯,可以分為三類:解釋執(zhí)行,靜態(tài)翻譯,動態(tài)翻譯。
1.解釋執(zhí)行對源處理器代碼中的每條指令實時解釋執(zhí)行,系統(tǒng)不保存也不緩存解釋過的指令,不需要用戶干涉,也不進行任何優(yōu)化。解釋器相對容易開發(fā),比較容易與老的體系結(jié)構(gòu)高度兼容,但代碼執(zhí)行效率很差。
2.靜態(tài)翻譯是在源處理器代碼執(zhí)行之前對其進行翻譯,將源機器上的二進制可執(zhí)行程序文件A完全翻譯成目標機器上的二進制可執(zhí)行程序文件B,然后在目標機上執(zhí)行程序B.一次翻譯的結(jié)果可以多次使用。靜態(tài)翻譯器離線翻譯程序,有足夠的時間進行更完整細致的優(yōu)化,代碼執(zhí)行效率較高。然而,靜態(tài)翻譯器無法很好地解決自修改代碼,間接過程調(diào)用及間接跳轉(zhuǎn)等問題,需要依賴解釋器的支持;而且靜態(tài)翻譯器需要終端用戶的參與,這給用戶使用造成了很大不便。
3.動態(tài)翻譯則在程序運行時對執(zhí)行到的片斷進行翻譯,克服了靜態(tài)翻譯的一些缺點--如由于不能知道控制流中某點的寄存器或內(nèi)存的值,因此不能實現(xiàn)代碼挖掘;動態(tài)翻譯還可以解決大部分實際情況中的自修改代碼問題,而這在靜態(tài)翻譯是不可能的;動態(tài)翻譯可以利用執(zhí)行時的動態(tài)信息來發(fā)掘靜態(tài)編譯器所不能發(fā)現(xiàn)的優(yōu)化機會;動態(tài)翻譯器對用戶可以做到完全透明,無需用戶干預。
參考資料 >