JNI签名代码分析

时间:2013-06-05 20:02:29

标签: java c java-native-interface code-analysis

是否有任何静态代码分析工具可以发现JNI(方法)签名字符串中的错误?例如,以下代码在语法上不正确(在完全限定的类名后缺少分号):

(*env)->GetMethodID(env, someClassId, "aMethod","(ILfoo/bar/TheClass)V");

编辑:代码分析工具不需要检查foo / bar / TheClass是否存在,而只是根据JNI规范检查字符串的有效语法。

这个问题的背景是,上面的代码触发了一个分段错误。这总是令人讨厌的调试情况,但静态分析在这种情况下应该非常容易,节省了大量时间。

1 个答案:

答案 0 :(得分:1)

如果您只需要对问题中的案例进行静态分析,签名直接位于GetMethodID调用中,您可以编写一个快速脚本来遍历代码文件并找到所有{{ 1}} / GetMethodID使用正则表达式进行调用,然后验证语法。

但您可以随时使用GetFieldIDOracle / IBM)选项来调试这些问题。由于JVM进行的验证,JNI调用会变慢,但所需的调试工作量会大大减少。