首页 > 解决方案 > 我们如何从 Soot 中的 APK 中获取单元的原始源代码行号?

问题描述

我正在构建一个使用 Soot 从 APK 文件中提取信息的小型实用程序。UnitGraph出于分析原因,我尝试使用Soot API 的 CFG获取某些 IR 语句(Jimple Soot 单元)的原始 Java 源文件行号。

我尝试在烟灰选项中启用线路保留选项。在搜索时,大家建议使用-keep-line-numbersoot 中的参数。我认为就 API 而言,以下行具有相同的效果。

Options.v().set_keep_line_number(true);

然后我使用了getJavaSourceLineNumber()每单位。

System.out.println(u.toString() + " - Source Line:" + u.getJavaSourceStartLineNumber());

我还尝试获得LineNumberTag

if(u.hasTag("LineNumberTag")) {
    LineNumberTag tag = (LineNumberTag) u.getTag(("LineNumberTag"));
    System.out.println(u + " has Line Number: " + tag.getLineNumber());
}

在所有情况下,我都无法获得源文件行号。在第一种情况下,我收到-1了所有调用,而后者导致了 NO-OP。

我在这里有什么遗漏吗?这是关于处理 APK - 它们最终可能不包含此类信息,还是其他?谢谢你。

标签: javaandroidgraphanalysissoot

解决方案


推荐阅读