首页 > 其他分享 >smali指令设置空的静态方法采坑与解决

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

时间:2022-11-24 14:39:01浏览次数:47  
标签:return 采坑 void method registers static image 静态方法 smali


如果直接删除会导致如下错误​​.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​



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


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个错误,



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


image.png


252行



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


image.png


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

之后也差不多同样的错误



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


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​



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


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

标签:return,采坑,void,method,registers,static,image,静态方法,smali
From: https://blog.51cto.com/u_15458814/5883890

相关文章

  • 超长参数的调用方式smali代码
    这里面包含了范围的调用多个参数的局部参数调用。.line150invoke-super/range{p0..p3},Lcn/qssq666/applicationdemo/BaseActivity;->onRequestPermissionsResult......
  • 007.初始化IoC容器(基于XML配置Bean 基于工厂实例化对象,静态方法)05
    1.工厂模式就是指隐藏创建类的细节,通过一个额外的工厂类来组织创建我们需要的对象,工厂按表现形式又分为静态工厂和工厂实例2.  src/main/java/com/imooc/spring/ioc/fa......
  • 基于python中的静态方法,类方法以及类变量的用法
    基于python中的静态方法,类方法以及类变量的用法最近在做scada系统的自动化部署,采用python语言,在开发过程中用到了,静态方法,类方法,以及类变量,下面就这个特殊的用法做个......
  • 接口中定义静态方法和默认方法(JDK8)
    JAVA8之前,接口里的方法要求全部是抽象方法。JAVA8(含8)之后,以后允许在接口里定义默认方法和静态方法。JDK8新特性_默认方法Java8及以上新版本,允许给接口添加一个......
  • static-静态方法和工具类
    什么叫静态方法特点和调用方式工具类定义:帮助我们做一些事情的,但是不描述任何事物的类已经学习过的类工具类的使用规则练习实操类--ArrayUtilpack......
  • 94:类方法_静态方法_内存分析图示
    ###类方法 类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod来定义,格式如下:  @classmethod  def类方法名(cls[,形参列表]):    函数体要点如下......
  • python的类方法和静态方法
    实例方法1、只能通过对象调用(第一个参数self:代表对象本身)2、适用场景:方法内部如果要使用对象的属性或者方法,就要定义成对象方法类方法1、要先使用@classmethod声明......
  • Promise的部分静态方法(all,race,allSettled)
    Promise.all作用:合并多个promise对象,等待结果全部成功后,返回结果语法:Promise.all([Promise对象1,Promise对象2,Promise对象3]…).then()特点:返回结果是一个数组,注意:如......
  • 实例方法、类方法、静态方法、私有方法详解
     实例方法、类方法、静态方法、私有方法详解 一、实例方法实例方法的定义 classTestDemo:#实例方法定义在类中deftest_01(self):print("test_01是实......
  • 动静态方法根派生与继承
    动静态方法在类中定义的函数有多种特性classStudent:school_name='摆烂大学'1.类中直接定义函数默认绑定给对象类调用有几个参数传几个对象调用第一个参数就......