du1263794094 发表于 2024-6-4 18:37

smali语法中关于寄存器数量的问题

本帖最后由 du1263794094 于 2024-6-4 18:38 编辑

手上的软件里,有一个类是封装对象类,我想在获取这个类的实例的其他方法里改写代码,将获取实例的方法,改为我自己写的返回实例的方法(当然这个实例的某些属性也被我修改了),于是我在封装对象类里写了一个getModel方法,并对部分成员变量的值作了修改,最后返回一个对象,smali代码如下


.method public getModel()Lcom/aabb/aabbcc/aabbccdd/model/device/Model;
    .registers 5

    new-instance v0, Lcom/aabb/aabbcc/aabbccdd/model/device/Model;

    invoke-direct {v0}, Lcom/aabb/aabbcc/aabbccdd/model/device/Model;-><init>()V

    const-wide/16 p0, 0x0

    iput-wide p0, v0, Lcom/aabb/aabbcc/aabbccdd/model/device/Model;->remainValue:D

    const-string v1, "2020-08-17 16:16:42"

    iput-object v1, v0, Lcom/aabb/aabbcc/aabbccdd/model/device/Model;->createTime:Ljava/lang/string;

    const-string v2, "管理员"

    iput-object v2, v0, Lcom/aabb/aabbcc/aabbccdd/model/device/Model;->creator:Ljava/lang/string;

    const-string v3, "大帅与小美"

    iput-object v3, v0, Lcom/aabb/aabbcc/aabbccdd/model/device/Model;->name:Ljava/lang/string;

    return-object v0
.end method

但是运行时报错了,logcat日志显示

getModel(): wide register index out of range (4+1 >= 5)

我自己的理解是寄存器数量不足造成的,那么把寄存器数量改多一些就能解决了?我只找到一个遇到相同问题的网页,但是那里没有解决问题的回答,所所以发帖请大佬解答一下

附 遇到同样问题的外网提问帖链接 https://stackoverflow.com/questions/58603066/smali-wide-register-index-out-of-range

捷豹网络丶贱仔 发表于 2024-6-4 20:05

捷豹网络丶贱仔 发表于 2024-6-4 20:06

捷豹网络丶贱仔 发表于 2024-6-4 20:18

捷豹网络丶贱仔 发表于 2024-6-4 20:19

正己 发表于 2024-6-4 21:43

把register改大

du1263794094 发表于 2024-6-5 00:00

捷豹网络丶贱仔 发表于 2024-6-4 20:19
给你添加了标注给你优化了一下,你看一下哪个

感谢回复
页: [1]
查看完整版本: smali语法中关于寄存器数量的问题