本地代碼

本地代碼(native code)是計算機編程(代碼),編譯用來運行一個特殊的處理器(如英特爾x86級的處理器)和它的特殊指令集。

簡介

本地代碼(native code)是計算機編程(代碼),編譯用來運行一個特殊的處理器(如英特爾x86級的處理器)和它的特殊指令集。如果同一個程式在不同的處理器上執行的話軟體就必須能夠模擬出舊的處理器的指令。這種情況下,同一個程式是在模擬模式下運行的,這樣就會導致它比在本機模式下運行速度慢。(這個程式可以重寫並且重新編譯這樣就可以用新的處理器執行本機模式了。)

本地代碼也可以與位元組碼區分開來(有時候叫做編譯代碼),這種代碼可以在虛擬機上運行(比如JAVA虛擬機)。虛擬機是一個把通用位元組碼轉換成用於特定處理器的本地代碼的程式。微軟的.NET編譯器產生的就是位元組碼(微軟叫它作中間語言)。Java位元組碼和微軟的中間語言都能在執行前被即時編譯器編譯成高性能的本機代碼。

虛擬機

本地代碼也可以與位元組碼區分開來(有時候叫做編譯代碼),這種代碼可以在虛擬機上運行(比如JAVA虛擬機)。虛擬機是一個把通用位元組碼轉換成用於特定處理器的本地代碼的程式。微軟的.NET編譯器產生的就是位元組碼(微軟叫它作中間語言)。Java位元組碼和微軟的中間語言都能在執行前被即時編譯器編譯成高性能的本機代碼。

反編譯

將程式轉換成本地代碼也是一種防止反編譯的有效方法。因為本地代碼往往難以被反編譯。開發人員可以選擇將整個應用程式轉換成本地代碼,也可以選擇關鍵模組轉換。如果僅僅轉換關鍵部分模組,Java程式在使用這些模組時,需要使用JNI技術進行調用。當然,在使用這種技術保護Java程式的同時,也犧牲了Java的跨平台特性。對於不同的平台,我們需要維護不同版本的本地代碼,這將加重軟體支持和維護的工作。不過對於一些關鍵的模組,有時這種方案往往是必要的。為了保證這些本地代碼不被修改和替代,通常需要對這些代碼進行數字簽名。在使用這些本地代碼之前,往往需要對這些本地代碼進行認證,確保這些代碼沒有被黑客更改。如果簽名檢查通過,則調用相關JNI方法。

別稱

本地代碼有時叫非託管代碼。

相關詞條

熱門詞條

聯絡我們