java - Android中修改APK的部分smali代码后如何定位注册问题?

标签 java android debugging dalvik smali

我想向应用程序添加一些内容,因此我在 smali 文件中添加了一些行(使用 apktools 反编译 apk),然后重新打包并在真实设备上运行它。 它显示

  • 10121 10211 E AndroidRuntime:os.json.JSONObject a.b.a.a.a.i.m(android.context.Context, java.lang.String) 失败 验证: os.json.JSONObject a.b.a.a.a.i.m(android.context.Context, java.lang.String): [0x161] v0 的类型为冲突,但符合预期 引用:java.lang.AutoCloseable('a.b.a.a.a.i' 的声明 /data/app/xxxx/xxxxx/base.apk)

那么[0x161]指的是什么?是行号吗? 0x161 = 十进制 353。于是我检查了smali代码,但是smali中函数a.b.a.a.a.i.m只有不到353行,所以没有353行,无法定位错误。

这个函数在java中也没有足够的行数(我使用jadx反编译生成的apk)。

那么在哪种类型的文件中我可以找到文件第353行的问题呢?我是否应该将 apk 转换为其他格式以找到第 353 行来解决错误?提前致谢。

最佳答案

0x161 应该是从方法开始的相对偏移/地址(以字节为单位)。

在 Jadx 中,打开您感兴趣的类的 Smali 选项卡,然后从 smali 代码面板的上下文菜单中选择显示 Dalvik 字节码 以查看偏移量。您要查找的偏移量应显示在第二个灰色列中(示例屏幕截图中带有红色边框的列)。

Example Jadx smali code view

该错误应该是由于在v0中放置了错误的对象引用引起的。

关于java - Android中修改APK的部分smali代码后如何定位注册问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70926990/

相关文章:

Java 事件监听器代码未按预期运行(初学者)

java - 循环遍历集合

java - 您在 Log4j 中见过基于 NDC 将日志记录到单独文件的附加程序吗?

android - 从 Android 应用程序中删除功能的安全方法

android - 使用 Google 帐户进行安全的 Android 身份验证

java - lombok 是否适用于 Java 12?

android - 在 Android 3.0+ 上设置首选项的初始摘要

c++ - MSVC6 : Breakpoint stops program

c++ - 发布和调试编译程序的源代码是否有所不同? [C/C++]

javascript - 使用谷歌浏览器调试和编辑嵌入在 HTML 页面中的 javascript