前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >smali基本语法

smali基本语法

原创
作者头像
八神太一
修改2021-04-19 10:42:21
1.1K0
修改2021-04-19 10:42:21
举报
文章被收录于专栏:androudandroud

Smali语法 ①基本数据类型 smali类型     java类型 V                  void Z                  boolean B                  byte S                  short C                  char I                   int J                   long (64位 需要2个寄存器存储) F                  float D                 double (64位 需要2个寄存器存储) ②对象 smali对象                                                        java对象 Lpackage/name/ObjectName;              package.name.ObjectName Ljava/lang/String;                                        java.lang.String L 表示对象类型 package/name 表示包名 ; 表示结束③数组 smali数组                                    java数组 [I                                            int[] 一维数组 [[I                                           int[][] 二维数组 [Ljava/lang/String                   String[] 对象数组 注:每一维最多255个④类字段/变量 Lpackage/name/ObjectName;——>FieldName:Ljava/lang/String; smali字段                                            java字段 public f1:Z                                       public boolean f1; public f2:I                                        public int f2; public f3:L                                       java/lang/String; public String f3; 1.赋值 静态static const-string v0, "Hello Smali" sput-object v0, Lcom/MyActivity;->name:Ljava/lang/String; 相当于java代码 MyActivity.name = "Hello Smali" 非静态instance .local v0, act:Lcom/MyActivity; const/4 v1, 0x2 iput v1, v0, Lcom/MyActivity;->name:Ljava/lang/String; 相当于java代码 act.name = "Hello Smali" 2.取值 静态(static fields) sget-object v0, Lcom/MyActivity;->name:Ljava/lang/String; 相当于java代码 v0 = MyActivity.name; 非静态(instance fields) .local v0, act:Lcom/MyActivity; iget-object v1, v0 Lcom/MyActivity;->name:Ljava/lang/String; 相当于java代码 v1 = act.name;⑤类方法/函数 smali方法                                                                       java方法 myMethod([I)Ljava/lang/String;                                        String myMethod(int[]) //Java代码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } #samli代码 .method protected onCreate(Landroid/os/Bundle;)V .locals 1 .parameter "savedInstanceState" .prologue .line 8 invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V .line 9 const/high16 v0, 0x7f03 invoke-virtual {p0, v0}, Lcom/fusijie/helloworld/MainActivity;->setContentView(I)V .line 10 return-void .end method #是smali注释 .method和.end method 类似Java大括号{} .locals 指定方法中非参寄存器总数,出现在方法第一行 .registers 指定方法中寄存器总数 .prologue 表示代码开始 .line 表示java源码行号,用于调试 invoke-static 调用static方法/函数 invoke-super 调用父类方法 invoke-direct 调用private方法 invoke-virtual 调用protected或public方法 return-void 表示方法结束返回void p0 在静态方法中表示当前对象实例 p1 表示当前onCreate方法参数 v0 表示本地(局部)变量,存放在locals寄存器 move-result 获取方法返回基本数据类型 move-result-object 获取方法返回对象 const/4 v2, 0x0 invoke-virtual {p0, v2}, Lcom/Activity;->getPreferences(I)Landroid/content/SharedPreferences; move-result-object v1 v1保存的就是调用getPreferences(int)方法返回的SharedPreferences实例 invoke-virtual {v2}, Ljava/lang/String;->length()I move-result v2 v2保存的则是调用String.length()返回的整型 注: Long和Double类型是64位,需要2个寄存器存储参数 例如: myMethod(IJ)V; 参数 P1 I(int) P2,P3 J(long)⑥条件判断语句(if) if-eq p1, v0, :c1 :c1 invoke-direct {p0}, Lcom/paul/test/a;->d()V 解读:如果p1和v0相等,则执行c1流程 if-ne p1, v0, :c2 :c2 invoke-direct {p0}, Lcom/paul/test/a;->c()V 解读:表示不相等,则执行c2流程 if-gt 大于 if-ge 大于等于 if-lt 小于 if-le 小于等于 "if-eq vA, vB, :cond_**"   如果vA等于vB则跳转到:cond_** "if-ne vA, vB, :cond_**"   如果vA不等于vB则跳转到:cond_** "if-lt vA, vB, :cond_**"    如果vA小于vB则跳转到:cond_** "if-ge vA, vB, :cond_**"   如果vA大于等于vB则跳转到:cond_** "if-gt vA, vB, :cond_**"   如果vA大于vB则跳转到:cond_** "if-le vA, vB, :cond_**"    如果vA小于等于vB则跳转到:cond_** "if-eqz vA, :cond_**"   如果vA等于0则跳转到:cond_** "if-nez vA, :cond_**"   如果vA不等于0则跳转到:cond_** "if-ltz vA, :cond_**"    如果vA小于0则跳转到:cond_** "if-gez vA, :cond_**"   如果vA大于等于0则跳转到:cond_** "if-gtz vA, :cond_**"   如果vA大于0则跳转到:cond_** "if-lez vA, :cond_**"    如果vA小于等于0则跳转到:cond_**

"goto ,:goto_**" 如果判断完,就最后执行goto_**

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档