我目前正在学习如何在 APK 中包含的 ELF SO 文件中实现本机功能。我正在使用 IDA。
本机调用总是以这种方式实现的。
// First load the library
class myClass{
public myClass(){
super();
v0 = system.loadLibrary("library-native");
//then declare the methods
}
public static native int nativeMethod(byte[] arg0, boolean arg1) ;
}
void a(){
// then uses it
ret = this.nativeMethod(byte,bool) ;
}
根据我在 JNI 中的一点经验,当使用反汇编器查看 library-native.so 时,我应该在导出的函数中看到类似 Java_package_name_libname_class_NativeMethod 的东西。
我看不到任何这些元素。当我在反汇编代码中搜索所需的函数(过去示例中的 nativeMethod)时,我没有找到任何线索。
我想知道 Dalvik 进程如何在执行本机调用时设法调用正确的函数,以及如何找到所需函数的源代码?
谢谢
编辑:我添加 nm 和 readelf 输出来澄清。
nm --defined-only library-native.so
nm library-native.so : no symbols
readelf -s library-native.so | grep nativeMethod // gives no output
//The only JNI related function
nm -D --defined-only library-native.so | grep JNI
00XX: JNI_onLoad