概述
文件基本格式
普通类、抽象类、接口、内部类,在反编译出来的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 [修饰关键字]
[.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“
最后
以上就是英勇酒窝为你收集整理的android 反编译 .smali,Android_反编译_smali语法的全部内容,希望文章能够帮你解决android 反编译 .smali,Android_反编译_smali语法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复