编辑smali。问题:低 16 位必须清零。十六进制id是不是错了?
Editing smali. Issue : Low 16 bits must be zeroed out. Is the hexadecimal id is wrong?
好morning/afternoon/evening,我是一个smali语言新手,在编译的过程中遇到了一个无法解决的问题。我希望之前没有人问过这个问题,但我检查了 Google 和 Whosebug 上的一些线程,但找不到任何解决方案,所以我假设它没有。那么,会发生什么:
我正在尝试修改我的应用程序的 C1.smali 文件,我只是想更改错误的数组 ID。所以我只是替换了id,我没有触及任何其他东西。
修改后的smali文件:
.line 52
invoke-virtual {p0}, Lcom/one/aplication/C1;->getResources()Landroid/content/res/Resources;
move-result-object v6
const/high16 v7, 0x7f060001
# array "Codes", id was 0x7f050000
invoke-virtual {v6, v7}, Landroid/content/res/Resources;->getStringArray(I)[Ljava/lang/String;
move-result-object v5
当然,我通过检查 public.xml 文件(在 res\values 中)验证了 id 是正确的。我让你自己看看:
<public type="string" name="name1" id="0x7f05003d" />
<public type="string" name="surname1" id="0x7f05003e" />
<public type="array" name="server" id="0x7f060000" />
<public type="array" name="Codes" id="0x7f060001" />
<public type="menu" name="search" id="0x7f070000" />
<public type="id" name="txt" id="0x7f080000" />
<public type="id" name="button1" id="0x7f080001" />
现在,当我想重新编译时,apktool 抛出一个我无法理解的问题:
C:\apktool>apktool b CC
I: Using Apktool 2.0.0-RC4
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
CC\smali\com\one\aplication\C1.smali[58,4] Invalid literal value: 2131099649.
Low 16 bits must be zeroed out.
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: com/one/aplication/C1.smali
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:71)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:354)
at brut.androlib.Androlib.buildSources(Androlib.java:294)
at brut.androlib.Androlib.build(Androlib.java:280)
at brut.androlib.Androlib.build(Androlib.java:255)
at brut.apktool.Main.cmdBuild(Main.java:225)
at brut.apktool.Main.main(Main.java:84)
有人知道这个问题的原因吗? apktool 问题指向行 [58],这是我修改的行。我真的不知道会发生什么!感谢任何愿意帮助我的人,请原谅我糟糕的英语。祝你有美好的一天! :)
在原始字节码中,const/high16
指令接受一个 16 位操作数,然后在加载到寄存器之前将其左移 16 位。在 smali 2.0 及更高版本中,操作数以 post 移位形式给出,当然这要求最低有效 16 位全部为 0。
例如,要将值 0x12340000 加载到寄存器中,您可以使用
const/high16 0x12340000
并且在原始字节码中,操作数将表示为 16 位值“0x1234”。
值0x7f060001不满足这个要求,所以不能和const/high16
指令一起使用。您可以改为使用 const
指令。
const v7, 0x7f060001
好morning/afternoon/evening,我是一个smali语言新手,在编译的过程中遇到了一个无法解决的问题。我希望之前没有人问过这个问题,但我检查了 Google 和 Whosebug 上的一些线程,但找不到任何解决方案,所以我假设它没有。那么,会发生什么:
我正在尝试修改我的应用程序的 C1.smali 文件,我只是想更改错误的数组 ID。所以我只是替换了id,我没有触及任何其他东西。
修改后的smali文件:
.line 52
invoke-virtual {p0}, Lcom/one/aplication/C1;->getResources()Landroid/content/res/Resources;
move-result-object v6
const/high16 v7, 0x7f060001
# array "Codes", id was 0x7f050000
invoke-virtual {v6, v7}, Landroid/content/res/Resources;->getStringArray(I)[Ljava/lang/String;
move-result-object v5
当然,我通过检查 public.xml 文件(在 res\values 中)验证了 id 是正确的。我让你自己看看:
<public type="string" name="name1" id="0x7f05003d" />
<public type="string" name="surname1" id="0x7f05003e" />
<public type="array" name="server" id="0x7f060000" />
<public type="array" name="Codes" id="0x7f060001" />
<public type="menu" name="search" id="0x7f070000" />
<public type="id" name="txt" id="0x7f080000" />
<public type="id" name="button1" id="0x7f080001" />
现在,当我想重新编译时,apktool 抛出一个我无法理解的问题:
C:\apktool>apktool b CC
I: Using Apktool 2.0.0-RC4
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
CC\smali\com\one\aplication\C1.smali[58,4] Invalid literal value: 2131099649.
Low 16 bits must be zeroed out.
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: com/one/aplication/C1.smali
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:71)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:354)
at brut.androlib.Androlib.buildSources(Androlib.java:294)
at brut.androlib.Androlib.build(Androlib.java:280)
at brut.androlib.Androlib.build(Androlib.java:255)
at brut.apktool.Main.cmdBuild(Main.java:225)
at brut.apktool.Main.main(Main.java:84)
有人知道这个问题的原因吗? apktool 问题指向行 [58],这是我修改的行。我真的不知道会发生什么!感谢任何愿意帮助我的人,请原谅我糟糕的英语。祝你有美好的一天! :)
在原始字节码中,const/high16
指令接受一个 16 位操作数,然后在加载到寄存器之前将其左移 16 位。在 smali 2.0 及更高版本中,操作数以 post 移位形式给出,当然这要求最低有效 16 位全部为 0。
例如,要将值 0x12340000 加载到寄存器中,您可以使用
const/high16 0x12340000
并且在原始字节码中,操作数将表示为 16 位值“0x1234”。
值0x7f060001不满足这个要求,所以不能和const/high16
指令一起使用。您可以改为使用 const
指令。
const v7, 0x7f060001