在 JNI 共享库中查找函数
Find the functions in a JNI Shared Library?
有谁知道如何通过 NDK 编译的共享库显示所有可用的函数,其中包含面向公众的 JNI 函数/方法?
我有一个 lib*jni.so 文件,我需要它来访问它的方法。使用 nm -Dg lib*jni.so 输出共享库中的所有符号。我只在寻找定义为 JNI 钩子的钩子。
谢谢凯文
您可以使用一些技巧来找出这一点。
-
检查相应的.class文件。如果您有库的.class文件,则可以在 Eclipse 中打开它们并搜索
native
关键字以查看已声明为在本机中实现的方法。 -
使用
strings
命令转储所有字符串。除非库对 Java 方法名称等进行运行时连接(不太可能),否则您应该能够列出从 .so 引用的大多数 Java 方法和类,并带有strings
。使用正则表达式,您可以过滤掉感兴趣的字符串。例如,将strings lib*jni.so | grep 'L[^;]*;'
列出从 .so 引用的所有类(例如Lcom/somecompany/project/SomeClass;
)。将方法与类匹配可能会很棘手,但根据您的需要,这可能就足够了。 -
构建一个 Dalvik VM 版本,该版本在每次注册本机方法时打印 logcat 消息。这是最先进和最耗时但最准确的。只需按照 http://source.android.com/source/index.html 中的说明构建 Android 模拟器,但在构建之前,请在 dalvik/vm/Jni 中
dvmRegisterJNIMethod
结束时启用调试打印.cpp因此它变为:LOGI("JNI-registered %s.%s:%s", clazz->descriptor, methodName, signature);
使用本机方法在.class文件上运行javap
。
- 递归ASMVisitor 和查找函数调用站点
- C++ - 查找函数无法在子字符串上执行
- 查找函数是否为常量
- GDB 如何查找函数退出的位置
- 查找函数在unordered_map中的工作方式是搜索键值
- 在 C++ <algorithm>中查找函数
- 错误:二进制表达式的操作数无效(映射使用查找函数错误)
- 哪个查找规则阻止编译器查找函数
- 在C++中查找函数的调用方(Visual Studio)
- 关于获取行和字符串查找函数的问题
- 查找函数在失败结果中应该返回什么
- 如何使用调用和别名指令在 llvm 字节码中查找函数名称
- std::字符串类查找函数不返回预期结果.我可能用错了
- 在成对向量中查找函数时出错
- 从堆栈指针中查找函数参数值
- 如何定义查找函数
- 如何查找函数是否可重入
- 在c++中查找函数
- GNU g++ 4.9.2 查找函数调用的编译错误
- 使用GDB查找函数对应的内存地址/调试