有谁知道如何使用面向公众的 JNI 函数/方法通过 NDK 编译的共享库显示所有可用函数?
我有一个 lib*jni.so 文件,我需要访问它的方法。使用 nm -Dg lib*jni.so 输出在共享库中找到的所有符号。我只是在寻找定义为 JNI Hook 的那些。
谢谢, 凯文
最佳答案
您可以使用一些技巧来找出这一点。
检查相应的 .class 文件。如果您有库的 .class 文件,您可以在 Eclipse 中打开它们并搜索
native
关键字查看哪些方法已声明为在 native 中实现。使用
strings
命令转储所有字符串。 除非该库执行 Java 方法名称的运行时连接等(不太可能),否则您应该能够列出大多数使用strings
从 .so 引用的 Java 方法和类。使用正则表达式,您可以过滤掉感兴趣的字符串。例如将strings lib*jni.so | grep 'L[^;]*;'
列出从 .so 引用的所有类(例如Lcom/somecompany/project/SomeClass;
)。将方法与类匹配可能会很棘手,但根据您的需要,这可能就足够了。构建一个 Dalvik VM 版本,在每次注册 native 方法时打印一条 logcat 消息。这是最先进、最耗时但最准确的。只需按照 http://source.android.com/source/index.html 上的说明进行操作即可构建 Android 模拟器,但在构建之前,在 dalvik/vm/Jni.cpp 中的
dvmRegisterJNIMethod
末尾启用调试打印所以它变成了:LOGI("JNI-registered %s.%s:%s", clazz->descriptor, methodName, signature);
关于android - 在 JNI 共享库中查找函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888576/