Smali入门
来源:互联网 发布:网络家教招聘 编辑:程序博客网 时间:2024/05/21 02:53
安装插件
写一个最简单的java类
package barray.demo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity { String TAG = this.getClass().getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG,"this is a tag"); }}
转换成Smali
Build->Compile to smali
.class public Lbarray/demo/MainActivity;.super Landroid/support/v7/app/AppCompatActivity;.source "MainActivity.java"# instance fields.field TAG:Ljava/lang/String;# direct methods.method public constructor <init>()V .registers 2 .prologue .line 7 invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()V .line 8 invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String; move-result-object v0 iput-object v0, p0, Lbarray/demo/MainActivity;->TAG:Ljava/lang/String; return-void.end method# virtual methods.method protected onCreate(Landroid/os/Bundle;)V .registers 4 .param p1, "savedInstanceState" # Landroid/os/Bundle; .prologue .line 12 invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V .line 13 const v0, 0x7f04001b invoke-virtual {p0, v0}, Lbarray/demo/MainActivity;->setContentView(I)V .line 14 iget-object v0, p0, Lbarray/demo/MainActivity;->TAG:Ljava/lang/String; const-string v1, "this is a tag" invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I .line 15 return-void.end method
分析如下:
- 类
.class public Lbarray/demo/MainActivity;.super Landroid/support/v7/app/AppCompatActivity;.source "MainActivity.java"
公共类 barray/demo/MainActivity 继承 android/support/v7/app/AppCompatActivity源文件 MainActivity.java
- 成员变量
# instance fields.field TAG:Ljava/lang/String;
成员变量 类型 java/lang/String 变量名 TAG
- 构造方法
.method public constructor <init>()V
公共构造方法
- 寄存器
.registers 2
需要两个寄存器
- 函数的开场白
.prologue
表示函数内执行的起始标记。直译为开场白的意思。
- 行数
.line 7
表示当前代码在源java文件中的行数。
- 调用实例
invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()V
invoke-virtual 或 invoke-virtual/range 调用实例的虚方法invoke-super 或 invoke-super/range 调用实例的父类方法invoke-direct 或 invoke-direct/range 调用实例的直接方法 invoke-static 调用实例的静态方法p0代表该对象thisLandroid/support/v7/app/AppCompatActivity 中的初始化方法
- 返回
move-result(返回基本数据类型)move-result-object(返回对象)指令 return-void 返回void
- 变量赋值
iput-object v0, p0, Lbarray/demo/MainActivity;->TAG:Ljava/lang/String;
将 v0 的值赋给 TAG
- 函数结束
end method
- 参数
.param p1, "savedInstanceState" # Landroid/os/Bundle;
参数 p1 参数名 savedInstanceState 类型 android/os/Bundle
- 常量
const v0, 0x7f04001b
常量 v0
阅读全文
0 0
- smali入门
- Smali入门
- Smali入门之HelloWorld
- smali入门之packed_switch
- smali入门之try..catch
- android smali入门之HelloWorld
- SMALI
- smali
- smali
- smali
- Android-Smali-入门介绍/基础语法
- smali入门之迭代器循环:列出进程名字
- SMALI语法
- smali语法
- smali语法
- smali语法
- smali语法
- Smali Registers
- learning R with swirl-vectors
- Linux shell编程学习笔记(四) 位置变量
- 万树IT:Java的五种创建对象的方式
- 二元光学透镜的分光成像、消色差原理
- 写让别人能读懂的代码
- Smali入门
- ApplicationCommands 应用程序常见命令
- Canvas绘图基本用法
- 设计模式—工厂模式
- 开关onoff的使用
- 浮点数的阶码,尾数与移码
- 欢迎使用CSDN-markdown编辑器
- Uva 572 Oil Deposits 油田 (DFS求连通块)
- Python3.6 20个入门级小程序(二)