JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。
简单介绍及应用如下:
一、JAVA中所需要做的工作
在JAVA程序中,首先需要在类中声明所调用的库名称,如下:
static {
SystemloadLibrary(“goodluck”);
}
在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。
还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下:
public native static void set(int i);
public native static int get();
然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。
例如程序testdlljava,内容为:
public class testdll
{
static
{
SystemloadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args)
{
testdll test = new testdll();
testset(10);
Systemoutprintln(testget());
}
}
用javac testdlljava编译它,会生成testdllclass。
再用javah testdll,则会在当前目录下生成testdllh文件,这个文件需要被C/C++程序调用来生成所需的库文件。
net的实时编译(JIT)特性决定了用它开发的程序可以被轻松反编译,同时由于采用反射等技术,使得DLL能被未授权调用。
所以要想不被破解,一是不能被反编译看到源码,二是不能被随意调用。
什么混淆加壳加密等,都是可逆的。鉴于net代码可以包含非托管代码,我们可以用C++解析C#代码生成DLL,这个DLL在被调用时验证调用者信息,就可以解决针对C#的破解,以及非授权调用了。
参考链接:>
以上就是关于java调用c++写的des加密dll程序,知道怎么实现吗全部的内容,包括:java调用c++写的des加密dll程序,知道怎么实现吗、C# DLL如何保护防止被破解、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)