Loading... # 引言 用C语言写Hello World,并且让java来执行,真的很酷的。😂 > 昨天开始有个要掉头发的设想,怎么破解JetBrains的IDEA呢? > javassist 注入一些区域注入不进去 > x64dbg 这就更掉头发了,jvm->字节码->人肉反编译 > jadx 一些地方混淆过了,关键字搜索页没搜到什么有用的信息。 > java远程调试 玩不明白 > 今天看到有大佬说jb为了防止破解,使用了JNI,JNI不能调试(Java级),并且javaagent也不能代理native # 准备工作 1. jdk 2. gcc 3. google ps: google 是 查问题用的 # 编写Java ``` public class main { public static native void hello(); // 本地方法,一会儿要用C写的方法名 public static void main(String[] args) { System.loadLibrary("main"); //载入dll或so hello(); //执行本地方法 } } ``` # 生成头文件 ```bash javac main.java javah main ``` # 写C代码 ```c #include<stdio.h> #include<jni.h> JNIEXPORT void JNICALL Java_main_hello(JNIEnv *env, jclass jc){ printf("Hello Native Function\n"); } ``` # 编译 注意一下,此时需要把之前生成的头文件和c文件放到一起。 这里我是用的是绝对路径了,因为环境变量让我配置的像坨屎一样。emm ```bash E:\StudyCode\Dev-Cpp\MinGW64\bin\gcc.exe "h:\main.c" -o "h:\main.dll" -I"E:\StudyCode\Dev-Cpp\MinGW64\include" -I"E:\StudyCode\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"E:\StudyCode\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include" -I"D:\Software\java\jdk1.8.0_301\include" -I"D:\Software\java\jdk1.8.0_301\include\win32" -L"E:\StudyCode\Dev-Cpp\MinGW64\lib" -L"E:\StudyCode\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc -shared ``` # 坑🕳 ```java 这说明你生成的是32位的,而jvm是64位的,不匹配。 Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\StudyCode\Java\JNI\demo01\demo.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1850) at java.lang.Runtime.loadLibrary0(Runtime.java:871) at java.lang.System.loadLibrary(System.java:1122) at main.main(main.java:8) ``` 这个报错信息是用visual studio编译报的错,也不知道是配置问题还是什么问题,就报了这个错 ```java Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\StudyCode\Java\JNI\demo01\demo.dll: Can't load this .dll (machine code=0x1) on a AMD 64-bit platform at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1850) at java.lang.Runtime.loadLibrary0(Runtime.java:871) at java.lang.System.loadLibrary(System.java:1122) at main.main(main.java:8) ``` # 运行效果 ![image.png](https://www.zunmx.top/usr/uploads/2023/03/2861950062.png) © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏