JNI和函数地址关系

Here are some commonly used functions (and their offsets in JNIEnv):

JNIEnv + 0x18: jclass (FindClass)(JNIEnv, const char);
JNIEnv + 0x34: jint (
Throw)(JNIEnv, jthrowable);
JNIEnv + 0x70: jobject (
NewObject)(JNIEnv, jclass, jmethodID, …);
JNIEnv + 0x84: jobject (
NewObject)(JNIEnv, jclass, jmethodID, …);
JNIEnv + 0x28C: jstring (
NewString)(JNIEnv, const jchar, jsize);
JNIEnv + 0x35C: jint (*RegisterNatives)(JNIEnv, jclass, const JNINativeMethod, jint);

Index Offset(Dec) Offset(Hex) Function
0 0 0 void* reserved0;
1 4 4 void* reserved1;
2 8 8 void* reserved2;
3 12 C void* reserved3;
4 16 10 jint (*GetVersion)(JNIEnv *);
5 20 14 jclass (DefineClass)(JNIEnv, const char, jobject, const jbyte, jsize);
6 24 18 jclass (FindClass)(JNIEnv, const char*);
7 28 1C jmethodID (FromReflectedMethod)(JNIEnv, jobject);
8 32 20 jfieldID (FromReflectedField)(JNIEnv, jobject);
9 36 24 jobject (ToReflectedMethod)(JNIEnv, jclass, jmethodID, jboolean);
10 40 28 jclass (GetSuperclass)(JNIEnv, jclass);
11 44 2C jboolean (IsAssignableFrom)(JNIEnv, jclass, jclass);
12 48 30 jobject (ToReflectedField)(JNIEnv, jclass, jfieldID, jboolean);
13 52 34 jint (Throw)(JNIEnv, jthrowable);
14 56 38 jint (*ThrowNew)(JNIEnv *, jclass, const char *);
15 60 3C jthrowable (ExceptionOccurred)(JNIEnv);
16 64 40 void (ExceptionDescribe)(JNIEnv);
17 68 44 void (ExceptionClear)(JNIEnv);
18 72 48 void (FatalError)(JNIEnv, const char*);
19 76 4C jint (PushLocalFrame)(JNIEnv, jint);
20 80 50 jobject (PopLocalFrame)(JNIEnv, jobject);
21 84 54 jobject (NewGlobalRef)(JNIEnv, jobject);
22 88 58 void (DeleteGlobalRef)(JNIEnv, jobject);
23 92 5C void (DeleteLocalRef)(JNIEnv, jobject);
24 96 60 jboolean (IsSameObject)(JNIEnv, jobject, jobject);
25 100 64 jobject (NewLocalRef)(JNIEnv, jobject);
26 104 68 jint (EnsureLocalCapacity)(JNIEnv, jint);
27 108 6C jobject (AllocObject)(JNIEnv, jclass);
28 112 70 jobject (NewObject)(JNIEnv, jclass, jmethodID, ...);
29 116 74 jobject (NewObjectV)(JNIEnv, jclass, jmethodID, va_list);
30 120 78 jobject (NewObjectA)(JNIEnv, jclass, jmethodID, jvalue*);
31 124 7C jclass (GetObjectClass)(JNIEnv, jobject);
32 128 80 jboolean (IsInstanceOf)(JNIEnv, jobject, jclass);
33 132 84 jmethodID (GetMethodID)(JNIEnv, jclass, const char, const char);
34 136 88 jobject (CallObjectMethod)(JNIEnv, jobject, jmethodID, ...);
35 140 8C jobject (CallObjectMethodV)(JNIEnv, jobject, jmethodID, va_list);
36 144 90 jobject (CallObjectMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
37 148 94 jboolean (CallBooleanMethod)(JNIEnv, jobject, jmethodID, ...);
38 152 98 jboolean (CallBooleanMethodV)(JNIEnv, jobject, jmethodID, va_list);
39 156 9C jboolean (CallBooleanMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
40 160 A0 jbyte (CallByteMethod)(JNIEnv, jobject, jmethodID, ...);
41 164 A4 jbyte (CallByteMethodV)(JNIEnv, jobject, jmethodID, va_list);
42 168 A8 jbyte (CallByteMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
43 172 AC jchar (CallCharMethod)(JNIEnv, jobject, jmethodID, ...);
44 176 B0 jchar (CallCharMethodV)(JNIEnv, jobject, jmethodID, va_list);
45 180 B4 jchar (CallCharMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
46 184 B8 jshort (CallShortMethod)(JNIEnv, jobject, jmethodID, ...);
47 188 BC jshort (CallShortMethodV)(JNIEnv, jobject, jmethodID, va_list);
48 192 C0 jshort (CallShortMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
49 196 C4 jint (CallIntMethod)(JNIEnv, jobject, jmethodID, ...);
50 200 C8 jint (CallIntMethodV)(JNIEnv, jobject, jmethodID, va_list);
51 204 CC jint (CallIntMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
52 208 D0 jlong (CallLongMethod)(JNIEnv, jobject, jmethodID, ...);
53 212 D4 jlong (CallLongMethodV)(JNIEnv, jobject, jmethodID, va_list);
54 216 D8 jlong (CallLongMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
55 220 DC jfloat (CallFloatMethod)(JNIEnv, jobject, jmethodID, ...);
56 224 E0 jfloat (CallFloatMethodV)(JNIEnv, jobject, jmethodID, va_list);
57 228 E4 jfloat (CallFloatMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
58 232 E8 jdouble (CallDoubleMethod)(JNIEnv, jobject, jmethodID, ...);
59 236 EC jdouble (CallDoubleMethodV)(JNIEnv, jobject, jmethodID, va_list);
60 240 F0 jdouble (CallDoubleMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
61 244 F4 void (CallVoidMethod)(JNIEnv, jobject, jmethodID, ...);
62 248 F8 void (CallVoidMethodV)(JNIEnv, jobject, jmethodID, va_list);
63 252 FC void (CallVoidMethodA)(JNIEnv, jobject, jmethodID, jvalue*);
64 256 100 jobject (CallNonvirtualObjectMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
65 260 104 jobject (CallNonvirtualObjectMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
66 264 108 jobject (CallNonvirtualObjectMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
67 268 10C jboolean (CallNonvirtualBooleanMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
68 272 110 jboolean (CallNonvirtualBooleanMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
69 276 114 jboolean (CallNonvirtualBooleanMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
70 280 118 jbyte (CallNonvirtualByteMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
71 284 11C jbyte (CallNonvirtualByteMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
72 288 120 jbyte (CallNonvirtualByteMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
73 292 124 jchar (CallNonvirtualCharMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
74 296 128 jchar (CallNonvirtualCharMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
75 300 12C jchar (CallNonvirtualCharMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
76 304 130 jshort (CallNonvirtualShortMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
77 308 134 jshort (CallNonvirtualShortMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
78 312 138 jshort (CallNonvirtualShortMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
79 316 13C jint (CallNonvirtualIntMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
80 320 140 jint (CallNonvirtualIntMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
81 324 144 jint (CallNonvirtualIntMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
82 328 148 jlong (CallNonvirtualLongMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
83 332 14C jlong (CallNonvirtualLongMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
84 336 150 jlong (CallNonvirtualLongMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
85 340 154 jfloat (CallNonvirtualFloatMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
86 344 158 jfloat (CallNonvirtualFloatMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
87 348 15C jfloat (CallNonvirtualFloatMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
88 352 160 jdouble (CallNonvirtualDoubleMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
89 356 164 jdouble (CallNonvirtualDoubleMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
90 360 168 jdouble (CallNonvirtualDoubleMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
91 364 16C void (CallNonvirtualVoidMethod)(JNIEnv, jobject, jclass, jmethodID, ...);
92 368 170 void (CallNonvirtualVoidMethodV)(JNIEnv, jobject, jclass, jmethodID, va_list);
93 372 174 void (CallNonvirtualVoidMethodA)(JNIEnv, jobject, jclass, jmethodID, jvalue*);
94 376 178 jfieldID (GetFieldID)(JNIEnv, jclass, const char, const char);
95 380 17C jobject (GetObjectField)(JNIEnv, jobject, jfieldID);
96 384 180 jboolean (GetBooleanField)(JNIEnv, jobject, jfieldID);
97 388 184 jbyte (GetByteField)(JNIEnv, jobject, jfieldID);
98 392 188 jchar (GetCharField)(JNIEnv, jobject, jfieldID);
99 396 18C jshort (GetShortField)(JNIEnv, jobject, jfieldID);
100 400 190 jint (GetIntField)(JNIEnv, jobject, jfieldID);
101 404 194 jlong (GetLongField)(JNIEnv, jobject, jfieldID);
102 408 198 jfloat (GetFloatField)(JNIEnv, jobject, jfieldID);
103 412 19C jdouble (GetDoubleField)(JNIEnv, jobject, jfieldID);
104 416 1A0 void (SetObjectField)(JNIEnv, jobject, jfieldID, jobject);
105 420 1A4 void (SetBooleanField)(JNIEnv, jobject, jfieldID, jboolean);
106 424 1A8 void (SetByteField)(JNIEnv, jobject, jfieldID, jbyte);
107 428 1AC void (SetCharField)(JNIEnv, jobject, jfieldID, jchar);
108 432 1B0 void (SetShortField)(JNIEnv, jobject, jfieldID, jshort);
109 436 1B4 void (SetIntField)(JNIEnv, jobject, jfieldID, jint);
110 440 1B8 void (SetLongField)(JNIEnv, jobject, jfieldID, jlong);
111 444 1BC void (SetFloatField)(JNIEnv, jobject, jfieldID, jfloat);
112 448 1C0 void (SetDoubleField)(JNIEnv, jobject, jfieldID, jdouble);
113 452 1C4 jmethodID (GetStaticMethodID)(JNIEnv, jclass, const char, const char);
114 456 1C8 jobject (CallStaticObjectMethod)(JNIEnv, jclass, jmethodID, ...);
115 460 1CC jobject (CallStaticObjectMethodV)(JNIEnv, jclass, jmethodID, va_list);
116 464 1D0 jobject (CallStaticObjectMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
117 468 1D4 jboolean (CallStaticBooleanMethod)(JNIEnv, jclass, jmethodID, ...);
118 472 1D8 jboolean (CallStaticBooleanMethodV)(JNIEnv, jclass, jmethodID, va_list);
119 476 1DC jboolean (CallStaticBooleanMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
120 480 1E0 jbyte (CallStaticByteMethod)(JNIEnv, jclass, jmethodID, ...);
121 484 1E4 jbyte (CallStaticByteMethodV)(JNIEnv, jclass, jmethodID, va_list);
122 488 1E8 jbyte (CallStaticByteMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
123 492 1EC jchar (CallStaticCharMethod)(JNIEnv, jclass, jmethodID, ...);
124 496 1F0 jchar (CallStaticCharMethodV)(JNIEnv, jclass, jmethodID, va_list);
125 500 1F4 jchar (CallStaticCharMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
126 504 1F8 jshort (CallStaticShortMethod)(JNIEnv, jclass, jmethodID, ...);
127 508 1FC jshort (CallStaticShortMethodV)(JNIEnv, jclass, jmethodID, va_list);
128 512 200 jshort (CallStaticShortMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
129 516 204 jint (CallStaticIntMethod)(JNIEnv, jclass, jmethodID, ...);
130 520 208 jint (CallStaticIntMethodV)(JNIEnv, jclass, jmethodID, va_list);
131 524 20C jint (CallStaticIntMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
132 528 210 jlong (CallStaticLongMethod)(JNIEnv, jclass, jmethodID, ...);
133 532 214 jlong (CallStaticLongMethodV)(JNIEnv, jclass, jmethodID, va_list);
134 536 218 jlong (CallStaticLongMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
135 540 21C jfloat (CallStaticFloatMethod)(JNIEnv, jclass, jmethodID, ...);
136 544 220 jfloat (CallStaticFloatMethodV)(JNIEnv, jclass, jmethodID, va_list);
137 548 224 jfloat (CallStaticFloatMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
138 552 228 jdouble (CallStaticDoubleMethod)(JNIEnv, jclass, jmethodID, ...);
139 556 22C jdouble (CallStaticDoubleMethodV)(JNIEnv, jclass, jmethodID, va_list);
140 560 230 jdouble (CallStaticDoubleMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
141 564 234 void (CallStaticVoidMethod)(JNIEnv, jclass, jmethodID, ...);
142 568 238 void (CallStaticVoidMethodV)(JNIEnv, jclass, jmethodID, va_list);
143 572 23C void (CallStaticVoidMethodA)(JNIEnv, jclass, jmethodID, jvalue*);
144 576 240 jfieldID (GetStaticFieldID)(JNIEnv, jclass, const char, const char);
145 580 244 jobject (GetStaticObjectField)(JNIEnv, jclass, jfieldID);
146 584 248 jboolean (GetStaticBooleanField)(JNIEnv, jclass, jfieldID);
147 588 24C jbyte (GetStaticByteField)(JNIEnv, jclass, jfieldID);
148 592 250 jchar (GetStaticCharField)(JNIEnv, jclass, jfieldID);
149 596 254 jshort (GetStaticShortField)(JNIEnv, jclass, jfieldID);
150 600 258 jint (GetStaticIntField)(JNIEnv, jclass, jfieldID);
151 604 25C jlong (GetStaticLongField)(JNIEnv, jclass, jfieldID);
152 608 260 jfloat (GetStaticFloatField)(JNIEnv, jclass, jfieldID);
153 612 264 jdouble (GetStaticDoubleField)(JNIEnv, jclass, jfieldID);
154 616 268 void (SetStaticObjectField)(JNIEnv, jclass, jfieldID, jobject);
155 620 26C void (SetStaticBooleanField)(JNIEnv, jclass, jfieldID, jboolean);
156 624 270 void (SetStaticByteField)(JNIEnv, jclass, jfieldID, jbyte);
157 628 274 void (SetStaticCharField)(JNIEnv, jclass, jfieldID, jchar);
158 632 278 void (SetStaticShortField)(JNIEnv, jclass, jfieldID, jshort);
159 636 27C void (SetStaticIntField)(JNIEnv, jclass, jfieldID, jint);
160 640 280 void (SetStaticLongField)(JNIEnv, jclass, jfieldID, jlong);
161 644 284 void (SetStaticFloatField)(JNIEnv, jclass, jfieldID, jfloat);
162 648 288 void (SetStaticDoubleField)(JNIEnv, jclass, jfieldID, jdouble);
163 652 28C jstring (NewString)(JNIEnv, const jchar*, jsize);
164 656 290 jsize (GetStringLength)(JNIEnv, jstring);
165 660 294 const jchar* (GetStringChars)(JNIEnv, jstring, jboolean*);
166 664 298 void (ReleaseStringChars)(JNIEnv, jstring, const jchar*);
167 668 29C jstring (NewStringUTF)(JNIEnv, const char*);
168 672 2A0 jsize (GetStringUTFLength)(JNIEnv, jstring);
169 676 2A4 const char* (GetStringUTFChars)(JNIEnv, jstring, jboolean*);
170 680 2A8 void (ReleaseStringUTFChars)(JNIEnv, jstring, const char*);
171 684 2AC jsize (GetArrayLength)(JNIEnv, jarray);
172 688 2B0 jobjectArray (NewObjectArray)(JNIEnv, jsize, jclass, jobject);
173 692 2B4 jobject (GetObjectArrayElement)(JNIEnv, jobjectArray, jsize);
174 696 2B8 void (SetObjectArrayElement)(JNIEnv, jobjectArray, jsize, jobject);
175 700 2BC jbooleanArray (NewBooleanArray)(JNIEnv, jsize);
176 704 2C0 jbyteArray (NewByteArray)(JNIEnv, jsize);
177 708 2C4 jcharArray (NewCharArray)(JNIEnv, jsize);
178 712 2C8 jshortArray (NewShortArray)(JNIEnv, jsize);
179 716 2CC jintArray (NewIntArray)(JNIEnv, jsize);
180 720 2D0 jlongArray (NewLongArray)(JNIEnv, jsize);
181 724 2D4 jfloatArray (NewFloatArray)(JNIEnv, jsize);
182 728 2D8 jdoubleArray (NewDoubleArray)(JNIEnv, jsize);
183 732 2DC jboolean* (GetBooleanArrayElements)(JNIEnv, jbooleanArray, jboolean*);
184 736 2E0 jbyte* (GetByteArrayElements)(JNIEnv, jbyteArray, jboolean*);
185 740 2E4 jchar* (GetCharArrayElements)(JNIEnv, jcharArray, jboolean*);
186 744 2E8 jshort* (GetShortArrayElements)(JNIEnv, jshortArray, jboolean*);
187 748 2EC jint* (GetIntArrayElements)(JNIEnv, jintArray, jboolean*);
188 752 2F0 jlong* (GetLongArrayElements)(JNIEnv, jlongArray, jboolean*);
189 756 2F4 jfloat* (GetFloatArrayElements)(JNIEnv, jfloatArray, jboolean*);
190 760 2F8 jdouble* (GetDoubleArrayElements)(JNIEnv, jdoubleArray, jboolean*);
191 764 2FC void (ReleaseBooleanArrayElements)(JNIEnv, jbooleanArray, jboolean*, jint);
192 768 300 void (ReleaseByteArrayElements)(JNIEnv, jbyteArray, jbyte*, jint);
193 772 304 void (ReleaseCharArrayElements)(JNIEnv, jcharArray, jchar*, jint);
194 776 308 void (ReleaseShortArrayElements)(JNIEnv, jshortArray, jshort*, jint);
195 780 30C void (ReleaseIntArrayElements)(JNIEnv, jintArray, jint*, jint);
196 784 310 void (ReleaseLongArrayElements)(JNIEnv, jlongArray, jlong*, jint);
197 788 314 void (ReleaseFloatArrayElements)(JNIEnv, jfloatArray, jfloat*, jint);
198 792 318 void (ReleaseDoubleArrayElements)(JNIEnv, jdoubleArray, jdouble*, jint);
199 796 31C void (GetBooleanArrayRegion)(JNIEnv, jbooleanArray, jsize, jsize, jboolean*);
200 800 320 void (GetByteArrayRegion)(JNIEnv, jbyteArray, jsize, jsize, jbyte*);
201 804 324 void (GetCharArrayRegion)(JNIEnv, jcharArray, jsize, jsize, jchar*);
202 808 328 void (GetShortArrayRegion)(JNIEnv, jshortArray, jsize, jsize, jshort*);
203 812 32C void (GetIntArrayRegion)(JNIEnv, jintArray, jsize, jsize, jint*);
204 816 330 void (GetLongArrayRegion)(JNIEnv, jlongArray, jsize, jsize, jlong*);
205 820 334 void (GetFloatArrayRegion)(JNIEnv, jfloatArray, jsize, jsize, jfloat*);
206 824 338 void (GetDoubleArrayRegion)(JNIEnv, jdoubleArray, jsize, jsize, jdouble*);
207 828 33C void (SetBooleanArrayRegion)(JNIEnv, jbooleanArray, jsize, jsize, const jboolean*);
208 832 340 void (SetByteArrayRegion)(JNIEnv, jbyteArray, jsize, jsize, const jbyte*);
209 836 344 void (SetCharArrayRegion)(JNIEnv, jcharArray, jsize, jsize, const jchar*);
210 840 348 void (SetShortArrayRegion)(JNIEnv, jshortArray, jsize, jsize, const jshort*);
211 844 34C void (SetIntArrayRegion)(JNIEnv, jintArray, jsize, jsize, const jint*);
212 848 350 void (SetLongArrayRegion)(JNIEnv, jlongArray, jsize, jsize, const jlong*);
213 852 354 void (SetFloatArrayRegion)(JNIEnv, jfloatArray, jsize, jsize, const jfloat*);
214 856 358 void (SetDoubleArrayRegion)(JNIEnv, jdoubleArray, jsize, jsize, const jdouble*);
215 860 35C jint (RegisterNatives)(JNIEnv, jclass, const JNINativeMethod*, jint);
216 864 360 jint (UnregisterNatives)(JNIEnv, jclass);
217 868 364 jint (MonitorEnter)(JNIEnv, jobject);
218 872 368 jint (MonitorExit)(JNIEnv, jobject);
219 876 36C jint (GetJavaVM)(JNIEnv, JavaVM**);
220 880 370 void (GetStringRegion)(JNIEnv, jstring, jsize, jsize, jchar*);
221 884 374 void (GetStringUTFRegion)(JNIEnv, jstring, jsize, jsize, char*);
222 888 378 void* (GetPrimitiveArrayCritical)(JNIEnv, jarray, jboolean*);
223 892 37C void (ReleasePrimitiveArrayCritical)(JNIEnv, jarray, void*, jint);
224 896 380 const jchar* (GetStringCritical)(JNIEnv, jstring, jboolean*);
225 900 384 void (ReleaseStringCritical)(JNIEnv, jstring, const jchar*);
226 904 388 jweak (NewWeakGlobalRef)(JNIEnv, jobject);
227 908 38C void (DeleteWeakGlobalRef)(JNIEnv, jweak);
228 912 390 jboolean (ExceptionCheck)(JNIEnv);
229 916 394 jobject (NewDirectByteBuffer)(JNIEnv, void*, jlong);
230 920 398 void* (GetDirectBufferAddress)(JNIEnv, jobject);
231 924 39C jlong (GetDirectBufferCapacity)(JNIEnv, jobject);
232 928 3A0 jobjectRefType (GetObjectRefType)(JNIEnv, jobject);
posted @ 2022-10-12 14:42  公众号python学习开发  阅读(50)  评论(0编辑  收藏  举报