是否可以使用findbugs的代码分析来检索在Java中的函数调用中传递的变量的名称

时间:2018-09-10 17:33:38

标签: java android findbugs

url = "abc";  Intent intent = Intent.parseUri(url,other_variable);

我要检索的是“ URL”而不是“ abc”? 是否有任何可能的方法可以使用任何类型的静态代码分析来检索传递的变量的名称,而不是其值?

1 个答案:

答案 0 :(得分:1)

否。

在大多数情况下,Java在编译时不会保存局部变量名称。它们仅被视为寄存器:v0 = "abc"v1 = new Something()等。

有时候,变量名会另存为“本地”,但这并不是您可以依靠的,而且即使它确实存在,我也不认为您可以检索到它。

我是说这是在Smali进行了大量编码的人。虽然不是汇编语言或二进制语言,但它比Java的级别低,并且表明名称不保守。例如,以下Java:

String url = "abc";

在斯马里语中将是以下内容:

const-string/jumbo v0, "abc"

没有要检索的变量名的符号。

反编译为Java时可以再次显示。

String url = "abc";

当编译时丢失其变量名。因此,由反编译器决定给它一个。通常会选择

String string = "abc";

因为这是最简单,最易读的选项。