2013年11月5日 星期二

[原創] Modified machine code inside .vi file , a proof of how LabVIEW runs in machine code

在了解.vi 檔案內帶有編譯完成machine code之後,可以做一個小小實驗來佐證LabVIEW執行時是直接跑machine code的.考慮簡單的加法運算 255 + 255 =510,透過Code Extractor.vi擷取machine code的部分存檔為"SimpleAdd.vi_255+255.bin";
接著修改為0+255=255,一樣透過Code Extractor.vi擷取machine code的部分存檔為"SimpleAdd.vi_0+255.bin"; 

比對一下"SimpleAdd.vi_255+255.bin"與"SimpleAdd.vi_0+255.bin", 可以發現只差在下圖紅字的地方,其實也可以發現LabVIEW編譯器會直接將兩個常數255+255視為一個常數510(0x01FE)
未來寫code如果遇到有代表意義的常數相加時可以不用客氣直接大辣辣地貼出來,LabVIEW編譯器會幫你自動最佳化成最簡的常數

修改Code Extractor.vi ,讓他可以將修改後的machine code的binary file經zlib加密後取代原始vi檔的machine code部分,並另存檔案修改黨名為Modified_XXX.

開啟修改後的"Modified_ SimpleAdd.vi", Block Diagram雖然顯示 0+255 但執行卻是510
證明了LabVIEW run-time 執行時確實是跑machine code的!
 執行時選用Highlight execution可以看到非常有趣的畫面...

點Ctrl+Shift後再點run button, LabVIEW就會重新編譯回0+255=255了

沒有留言:

張貼留言