houdini 是intel 研發的ARM binary translator。
它的原理在於把ARM的二進制代碼轉譯爲X86指令集,使得可以在X86的CPU上執行。
Intel是移動市場的新進者,最近出了幾款面向移動市場的SOC,面對應用程序支持缺乏的問題,有兩條路可以走:
1.逐家拜訪應用開發商,要求他們重新爲intel的cpu編譯一份應用。
2.使用二進制轉換,使得已有的應用可以運行在intel的cpu上。
該產品並不開源,可以在聯想的K900 ROM裏面可以找到二進制版本。一共有三個文件:libhoudini.so libdvm_houdini.so houdini_armlibs.tgz
原理是:當Dalvik VM加載lib失敗時,程序流會再次嘗試用libhoudini中的my_dlopen打開。該lib類似於QEMU的user mode emulator,通過虛擬一個ARM的CPU (包含指令集和寄存器,但是沒有外設模擬),加載基於ARM指令集的lib。目前還不清楚是基於解析執行,還是JIT方式實現。
採用類似技術的產品有valgrind(模擬X86 CPU來檢測程序內存泄露),qemu user mode(可以在X86 linux下執行mips的elf文件)
類似概念的產品
- 爲ARM服務器產品準備的二進制翻譯軟件 (X86轉ARM指令集) http://server.chinabyte.com/345/12451845.shtml
- FX!32 (X86 windows程序運行在Alpha CPU的Windows NT上) http://en.wikipedia.org/wiki/FX!32