android smali编辑:低位必须为零

时间:2018-12-30 09:44:26

标签: java android smali

无法重新打包smali文件错误代码:apktool无效的文字值低16位必须为零。

我应使用哪个寄存器值代替““ const / high16 v4”“”,并将其替换为0x7f04006a

.line 11
move-object v3, v0

move-object v4, v1

invoke-super {v3, v4}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

.line 12
move-object v3, v0

const/high16 v4, 0x7f030000

invoke-virtual {v3, v4}, Lcom/mycompany/myapp/MainActivity;->setContentView(I)V

return-void

.end方法

我的公开ID为<public type="layout" name="main" id="0x7f04006a" />

1 个答案:

答案 0 :(得分:0)

const/high16指令接受16位文字,将其左移16位并将其加载到指定的寄存器中。

此指令的smali语法使用后移位的文字值。因此,在您的示例const/high16 v4, 0x7f030000中,在原始字节码中,指令的实际文字参数将为0x7f03。但是在smali语法中,它指定为移位后的形式:0x7f030000。由于这是后移位形式,因此最后4个十六进制数字必须始终为0。

如果要加载不满足这些要求的文字值,则必须使用其他指令,例如const指令。

const v4, 0x7f04006a