java - 我们如何从 Soot 中的 APK 中获取单元的原始源代码行号?
问题描述
我正在构建一个使用 Soot 从 APK 文件中提取信息的小型实用程序。UnitGraph
出于分析原因,我尝试使用Soot API 的 CFG获取某些 IR 语句(Jimple Soot 单元)的原始 Java 源文件行号。
我尝试在烟灰选项中启用线路保留选项。在搜索时,大家建议使用-keep-line-number
soot 中的参数。我认为就 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 - 它们最终可能不包含此类信息,还是其他?谢谢你。
解决方案
推荐阅读
- python - 带有 Qwidget 的 KeyPressEvent 不起作用?
- swiftui - 自定义形状记录在绘制路径之外的点击
- python-3.x - 在 Python 中,如何在使用类装饰器时正确输入?
- pytorch - 我们可以在保留图形的同时使用控制流而不是张量操作来修改张量数据吗?
- c# - 从控制器 ASP Net Core MVC 加载静态文件
- python - tensorflow 2.0 如何在给定条件下创建一个新的张量获取另一个张量的值?
- r - 将操作按钮与闪亮仪表板中的输入对齐
- python - Pandas 使用条件缺失值(groupby 其他列)
- opengl - 着色器如何知道我正在编辑颜色而不是其他内容
- javascript - 需要帮助使用 openweather api 将 skycons 添加到应用程序