美文网首页
smali指令设置空的静态方法采坑与解决

smali指令设置空的静态方法采坑与解决

作者: 吉凶以情迁 | 来源:发表于2018-10-20 22:24 被阅读0次

    如果直接删除会导致如下错误
    .method public static a()V方法直接删除会导致如下错误
    a non-abstract method must have at least 1 instruction
    修改为

        .locals 2
    
        .prologue
        .line 902
    const/4 v0,0x1
    return-void
    

    如果只保留void,则提示A register .locals directive must be present for a not-abstract/non-final method

    image.png
    意思是必须为非抽象/非最终方法提供本地指令。

    如果把寄存器.registers总数改为0 ,则提示this method param need 2 寄存器来保存,也就是说参数也会占用寄存器。

    .method public static a(Ljava/lang/String;Ljava/lang/String;)V
        .registers 2
        return-void
    .end method
    

    继续解决下面4个错误,


    image.png

    252行

    image.png
    我不小心删除了所有指令,也就是至少需要一个指令的,因此加上return-void便可以解决

    之后也差不多同样的错误

    image.png

    Cannot get the location of a label that hasn't been placed yet
    无法得到获取标签的位置。在652行smali代码
    代码如下

    .method public static m(Ljava/lang/String;)V
        .registers 4
    
        .prologue
    
        return-void
    .end method
    

    这没啥问题,问题出在上一个方法指令穿透,而且没有写return-void

    image.png

    类似的问题,

    错误的代码

    
    .method public static j()V
        .registers 4
    
        .prologue
        .line 680
        invoke-static {}, Lcom/qihoo/magic/DockerApplication;->getAppContext()Lcom/morgoo/droidplugin/PluginApplication;
    
        move-result-object v0
    
    
        :goto_17
        return-void
    
        .line 684
        :catch_18
        move-exception v0
    
        goto :goto_17
    .end method
    

    修正的代码

    .method public static j()V
        .registers 4
    
    
        .line 602
        return-void
    .end method
    

    相关文章

      网友评论

          本文标题:smali指令设置空的静态方法采坑与解决

          本文链接:https://www.haomeiwen.com/subject/mtcvzftx.html