一般我们在自定义修改apk时,难免会对smali代码进行增减删改,再回编的时候可能会遇到如下错误:

Invalid register: vx. Must be between v0 and v15, inclusive.

shakaApktool的中文提示为:

无效寄存器: v20. 必须在 v0 到 v15(含) 之间

其中vx>15,导致回编译错误。

错误原因可能有以下几种情况:

1.引用了不存在的方法参数。

参数个数很容易识别,但是一定要注意传入的方法参数是从p0,还是从p1开始的。根据smali规则,static方法参数从p0开始计数。

所以如果我们引用了不存在的参数,在回编时就会报RT错误。比如一个传入4个参数的static方法,我们修改时却引用到了p4,就会报错。

实例:http://www.52pojie.cn/thread-421963-1-1.html

2.使用vx>15的方式传参调用方法。

根据smali语法,在使用invoke-、iget-等非range形式调用方法,当传参vx>15时就会报RT错误,如下几种情况:

const-string v16, "b57ba656b518a6b145b9a77fabcddcf1f24ed757"
const-string v17, "logging"
invoke-static {v17, v16} ,Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
const-string v20, "1111111"
invoke-static {v20}, LFineT;->printStr00(Ljava/lang/String;)V

这时候需要调整调用方法为 /range 就ok了:

const-string v20, "1111111"
invoke-static/range {v20}, LFineT;->printStr00(Ljava/lang/String;)V
const-string v20, "b57ba656b518a6b145b9a77fabcddcf1f24ed757"
const-string v21, "logging"
invoke-static/range {v20..v21} ,Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

或者先将其 move 到vx<v15的上(注意寄存器的值变化),然后再传入调用:

const-string v0, "KKKKSend"
move-object/from16 v1, v27
invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

示例讨论: http://bbs.pediy.com/showthread.php?t=179791

3.当.local>15时,修改代码中使用了p0,p1等传参。

当.local>15时,修改时引用了传入参数,如p0,p1,p2..时,会包RT错误,如下我想插入一段弹出AlertDialog框的代码:

.method public onCreate(Landroid/os/Bundle;)V.locals 20.param p1, "savedInstanceState"    # Landroid/os/Bundle;.prologue#插入开始#new-instance v1,Landroid/app/AlertDialog$Builder;invoke-direct {v1,p0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)Vconst-string v2,"tip!!!"invoke-virtual {v1,v2}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;const-string v2,"1234567thisisadilog"invoke-virtual {v1,v2},Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;invoke-virtual {v1},Landroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog;move-result-object v2invoke-virtual {v2},Landroid/app/AlertDialog;->show()V#插入结束#invoke-super/range {p0 .. p1}, Lcom/yuchengtech/mobile/commonUtils/BaseFragmentActivity;->onCreate(Landroid/os/Bundle;)V.line 129sput-object p0, Lcom/yuchengtech/mobile/JZYHMainActivity;->ctx:Lcom/yuchengtech/mobile/JZYHMainActivity;
...

插入的代码中,在.local>15的情况下,使用invoke-非range形式引用了this对应的p0,这时回编就会报错。 修改方法为,将p0对象move给v0,引用v0:

    move-object/from16 v0, p0new-instance v1,Landroid/app/AlertDialog$Builder;invoke-direct {v1,v0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V

Apktool回编时Invalid register. Must be between v0 and v15, inclusive..的解决办法相关推荐

  1. invalid use of incomplete type struct 或者是class的解决办法

    在写完代码之后进行编译时,提示"invalid use of incomplete type struct" 或者 "invalid use of incomplete ...

  2. linux 汇编 gdb报错:Invalid register `eip‘(64位系统没有eip只有rip寄存器)

    (gdb) info register eip Invalid register `eip' 原因,我的系统是64位的,只有rip没有eip 8 bit - pc program counter 程序 ...

  3. 微信 开发诡异的40029错误invalid code错误 443 failed to respond错误的解决办法

    情景:使用静默授权或感知授权的方式将请求绑定到微信公众号的菜单栏上.链接如下: https://open.weixin.qq.com/connect/oauth2/authorize?appid=AP ...

  4. 解决办法:CMake编译时出现“error in configuration process project files may be invalid”

    无论是CMake2.84 还是当前最新的CMake2.87都可能会出现这种错: 查遍国内外的网上都没有给出可行办法,结果还是自己解决了 现把出错原因和解决办法如下: 出错原因:因是英文版本,通常安装没 ...

  5. IDEA+Maven+Springboot:invalid bound statement (not found) 解决办法

    自己使用Springboot搭建web项目,之前都是使用注解形式来执行sql获取查询内容,这次本承着闲得无聊试一试的想法,突发奇想想用xml的方式执行sql.很走心的参照自己之前spring项目的书写 ...

  6. SyntaxError: invalid syntax的问题原因和解决办法

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 一.问题 二.原因及解决办法 一.问题 // An highlighted block SyntaxError: ...

  7. Delphi的“Invalid pointer operation“异常的解决办法

    Delphi的"Invalid pointer operation"异常的解决办法 参考文章: (1)Delphi的"Invalid pointer operation& ...

  8. Oracle客户端工具出现“Cannot access NLS data files or invalid environment specified”错误的解决办法...

    Oracle客户端工具出现"Cannot access NLS data files or invalid environment specified"错误的解决办法 方法一:参考 ...

  9. macOS下加载动态库dylib报code signature invalid错误的解决办法

    一.现象描述 在macOS上搞开发也有一段时间了,也积攒了一定的经验.然而,今天在替换工程中的一个动态库时还是碰到了一个问题.原来工程中用的是一个静态库,调试时发现有问题就把它替换成了动态库.这本来没 ...

最新文章

  1. opencv cv2 视频延迟
  2. 比特币现金在稳定币领域的地位怎样
  3. java maven项目构建ssh工程 父工程与子模块的拆分与聚合
  4. [YTU]_2627 (职工工资统计)
  5. Diverse Strings
  6. [C程序设计语言]第一部分
  7. 学生时代,我做过最有价值的事是什么?
  8. CSDN博客如何复制别人的文章到自己的博客(很详细,看着图片傻瓜式操作)
  9. springmvc01
  10. docker--强制删除none的image镜像
  11. 恢复AndroidStudio中误删除的文件
  12. 【易错点 学习笔记】Solidity语法constant/view/pure
  13. amd一键超频怎么用_AMD Ryzen小白说明书——CPU超频篇
  14. http 阮一峰_WebSocket 教程 | 阮一峰
  15. 树模型(1)-入门指南
  16. 【报告分享】健身内容创作者发展研究报告-Keep×新榜(附下载)
  17. 图像恢复(加噪与去噪)
  18. MySQL中DATE_FORMAT()函数的说明和简介
  19. Mac os下快速从终端进入Finder 从Finder进入终端
  20. Linux请求调页技术,linux零页技术.doc

热门文章

  1. pycharm添加python编译器
  2. LinuxI/O多路复用转接服务器——select模型实现
  3. # 腾讯数据库TcaplusDB十年厚积薄发,已是参天大树
  4. html实现银行卡中间四位显示为*号,用正则给银行卡号部分加*号显示。。vue中根据不同的值,渲染相应的内容。。...
  5. Python实现简易五子棋(代码+注释)
  6. 重磅!【ICML | 2019】 人工智能(AI)会话系统介绍(含源码)
  7. 如何将ASP.NET MVC2项目升级到MVC 3 RC
  8. npm install报错:This version of npm is compatible with lockfileVersion@1, but package-lock.json was ge
  9. android底部导航栏中间凸起,Flutter学习笔记--仿闲鱼底部导航栏带有中间凸起图标...
  10. openssl之RSA相关函数