java – JNI签名代码分析
作者:互联网
是否有任何静态代码分析工具可以发现JNI(方法)签名字符串中的错误?例如,以下代码在语法上不正确(在完全限定的类名后缺少分号):
(*env)->GetMethodID(env, someClassId, "aMethod","(ILfoo/bar/TheClass)V");
编辑:代码分析工具不需要检查foo / bar / TheClass的存在,但只根据JNI规范检查字符串的有效语法.
这个问题的背景是,上面的代码触发了分段错误.这总是令人讨厌的调试情况,但静态分析应该非常容易,在这种情况下可以节省大量时间.
解决方法:
如果您只需要对问题中的案例进行静态分析,签名直接位于GetMethodID调用中,您可以编写一个快速脚本来遍历代码文件,并使用正则表达式查找所有GetMethodID / GetFieldID调用,然后验证语法.
但是你可以随时使用-Xcheck:jni(Oracle/IBM)选项来调试这些问题.由于JVM所做的验证,JNI调用会更慢,但所需的调试工作量会大大减少.
标签:java,c-3,code-analysis,java-native-interface 来源: https://codeday.me/bug/20190709/1409554.html