【原创】Java JNI 参数
来源:互联网 发布:js requestanimframe 编辑:程序博客网 时间:2024/06/05 00:19
反编译一个 APP 时候, 一个.so通过 loadLibrary加载. 把. so 逆向后, 函数名已经混淆,但无法根据参数信息获取究竟哪一个才是对外提供的接口.
所以了解一下 JNI,so文件中代码如何编码, 参数如何定义
a. 无参数 HelloJNI.Java
public class HelloJNI { static { System.loadLibrary("hello"); // hello.dll (Windows) or libhello.so (Unixes) } // Declare native method private native void sayHello(); // Test Driver public static void main(String[] args) { new HelloJNI().sayHello(); // invoke the native method }}
a. 无参数 HelloJNI.c
#include #include #include "HelloJNI.h"JNIEXPORT void HelloJNI { printf("Hello World!\n"); return;}
可以看到, java无参数调用接口时, *.c中定义的接口是有两个默认参数的. 一个 JNIEnv 一个 jobject.JNIEnv可以理解为 JNI 虚拟环境相关对象, jobject thisObj 看意思应该是类本身, 类似 java 中的this 或者 python 中的 self
再看一个有参数的
b. 有参数 HelloJNI.java
public class HelloJNI { static { System.loadLibrary("myjni"); // myjni.dll (Windows) or libmyjni.so (Unixes) } // Declare a native method average() that receives two ints and return a double containing the average private native double average(int n1, int n2); // Test Driver public static void main(String args[]) { System.out.println("In Java, the average is " + new TestJNIPrimitive().average(3, 2)); }}
b. 有参数 HelloJNI.c
#include #include #include "HelloJNI.h"JNIEXPORT jdouble JNICALL Java_TestJNIPrimitive_average (JNIEnv *env, jobject thisObj, jint n1, jint n2) { jdouble result; printf("In C, the numbers are %d and %d\n", n1, n2); result = ((jdouble)n1 + n2) / 2.0; // jint is mapped to int, jdouble is mapped to double return result;}
可以确认, 第一二个形参为默认参数, 之后的形参才是 java 调用时的实参.
参考:
0 0
- 【原创】Java JNI 参数
- 【原创】java web Actio…
- 【原创】java web strut…
- jni java String 转C char*工具类
- 【原创】 python simplegui
- 【原创】 linux Screen 使用
- 【原创】 下载 安装 bootstrap
- JNI VC DLL
- 【原创】Java HttpClient&nbs…
- 【原创】 linux Python 列表整合
- Java eclipse: e
- 【原创】感悟 花
- 【原创】FreeBuf 晒书会
- 【原创】python map
- 【原创】host 文件
- 【原创】suhu 视频
- 【原创】screen 用法
- 【原创】python gevent
- 【原创】Mac os 一次蓝屏修复
- 【原创】反编译Android apk,提取*.…
- 【原创】Macbook 修改 ls 时间格式
- 【原创】python requests&nbs…
- banner使用
- 【原创】Java JNI 参数
- 【原创】Java HttpClient&nbs…
- PHP中include引用jpgraph时出现问题
- 【原创】windows xp squ…
- 协同过滤算法
- 【原创】MAC-OX install&nbsp…
- 您的设计模式——适配器模式【Adapter Pattern】
- 【原创】Python Mongo 批量操作
- Redis哨兵—实现Redis高可用