本地代码(native code)是计算机编程(代码),编译用来运行一个特殊的处理器(如英特尔x86级的处理器)和它的特殊指令集。如果同一个程序在不同的处理器上执行的话软件就必须能够模拟出旧的处理器的指令。这种情况下,同一个程序是在模拟模式下运行的,这样就会导致它比在本机模式下运行速度慢。(这个程序可以重写并且重新编译这样就可以用新的处理器执行本机模式了。)
本地代码也可以与字节码区分开来(有时候叫做编译代码),这种代码可以在虚拟机上运行(比如JAVA虚拟机)。虚拟机是一个把通用字节码转换成用于特定处理器的本地代码的程序。微软的.NET编译器产生的就是字节码(微软叫它作中间语言)。
Java字节码和微软的中间语言都能在执行前被
即时编译器编译成高性能的本机代码。
本地代码也可以与
字节码区分开来(有时候叫做编译代码),这种代码可以在
虚拟机上运行(比如
JAVA虚拟机)。虚拟机是一个把通用字节码转换成用于特定处理器的本地代码的程序。微软的.NET
编译器产生的就是字节码(微软叫它作
中间语言)。Java字节码和微软的中间语言都能在执行前被即时编译器编译成高性能的本机代码。
将程序
转换成本地代码也是一种防止
反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,
Java程序在使用这些模块时,需要使用
JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则
调用相关
JNI方法。