Android_反编译_smali语法

文件基本格式

普通类、抽象类、接口、内部类,在反编译出来的smali代码中都是以单独的smali文件存放。每个smali 文件头3行描述基本信息

.class <访问权限> [修饰关键字] <类名>
.super <父类名>
.source <源文件名>

打开 MainActivity.smali 文件

.class public Lcom/example/demo/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"

第一行“.class” 指定当前的类名 ,类名表示类似于 jni 技术的类
第二行“.super” 指定父类
第三行“.source” 指定当前类的源文件名,混淆后可能没有值

如果类实现过接口

# interfaces
.implements Landroid/view/View$OnClickListener;

属性

  • 静态属性

      # static fields
      .field <访问权限> static [修饰关键字] <字段名>:<字段类型>
    

"#"开头为注释,“.field” 后面的访问权限为public、private、protected之一,修饰关键字为 final... ,字段名与字段类型使用冒号“:”分隔,类似swift的变量声明语法

    var str:String = "hello"

具体示例

    # static fields
    .field private static final TAG:Ljava/lang/String; = "Activity"  
  • 实例属性

      # instance fields
      .field <访问权限> static [修饰关键字] <字段名>:<字段类型>    
    

与静态属性相比少了static 关键字

方法

# direct methods
.method <访问权限> [修饰关键字] <方法原型>
    <.locals>
    [.parameter]
    [.prologue]
    [.line]
    <代码体>
.end method    

“.locals” 表示局部变量的个数
“.parameter” 方法的参数,肯存在多条
“.prologue” 代码的开始处,混淆的代码可能去掉改条
“.line” 知道在源代码中的行号
虚方法在起始的注释为“virtual methods”

  • 静态方法

      .method public static getString()Ljava/lang/String;
          .locals 1
    
          .prologue
          .line 58
          const-string v0, ""
    
          return-object v0
      .end method              
    

内部类

文件名 ”[外部类名]$[内部类名].smali“
匿名内部类 ”[外部类名]$[数字].smali“

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,314评论 19 139
  • 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方...
    小敏纸阅读 1,520评论 0 19
  • 一、背景熟悉VC编译器的朋友,对switch case汇编代码不会感到陌生。switch case 代码基本分位3...
    unsummon阅读 7,897评论 2 2
  • 1.流程 创建 HelloWorld.java代码如下package jvm; /** * @author ...
    RunAlgorithm阅读 1,403评论 4 6
  • 淡蓝色眼 慌乱了孤独的茧 阳光深邃浅隙 微微振翅 挣脱时光枷锁 长长短短的痕 一城又一城 盈迎熙风日落 溃败苦难蹉...
    青回音阅读 323评论 0 0

友情链接更多精彩内容