smali语法中的访问标记(accessflags)
来源:互联网 发布:java密码正则表达式 编辑:程序博客网 时间:2024/05/06 17:28
参考文献:Java字节码.class文件案例分析(http://blog.csdn.net/silentbalanceyh/article/details/42640739)
SMALI在整个互联网我看到的教程是少之又少,一般学过java的人才好理解里面代码的含义,当然了不排除那种长期接触的,不过很多都是不理解里面很多的意思
前几周搞patchrom的时候遇到过,当初研究后也没有写下来,今天搞apk时又遇到了,随便就写下来吧
相关smali代码如下:
.annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x8 name = "Alarm".end annotation
学过java的都很清楚,一看就知道是声明内部类的,其中:
“accessFlags”是访问标记(下面会说怎么算的以及代表什么)
”name“就是是内部类的名字我们知道,当内部类在成员位置上时是可以使用关键词的如:static 、final的(java基础不再讨论了)
现在来说下accessFlags在字节码中的计算方式:
access_flags的计算公式为:access_flags = flagA | flagB | flagB ...
java字节码字段访问标志
标志名称标志值二进制值含义ACC_PUBLIC0x00010000 0000 0000 0001是否publicACC_PRIVATE0x00020000 0000 0000 0010是否privateACC_PROTECTED0x00040000 0000 0000 0100是否protectedACC_STATIC0x00080000 0000 0000 1000是否staticACC_FINAL0x00100000 0000 0001 0000是否finalACC_VOLATILE0x00400000 0000 0100 0000是否volatileACC_TRANSIENT0x00800000 0000 1000 0000是否transientACC_SYNTHETIC0x10000001 0000 0000 0000是否由编译器自动产生ACC_ENUM0x40000100 0000 0000 0000是否enum那么现在可以知道上面代码的0x8是指static class Alarm
假设我把他改成0x10
那么就是指private static class Alarm
2|8=10
看不懂再给个例子:
class反编译后的smali代码:
.annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x0 name = "inner".end annotation
.annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x8 name = "inner2".end annotation
.annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x9 name = "inner3".end annotation
public class test {class inner{void echo(){System.out.println("test");}}static class inner2{void echo2(){System.out.println("test");}}public static class inner3{void echo3(){System.out.println("test");}}}
0 0
- smali语法中的访问标记(accessflags)
- SMALI语法
- smali语法
- smali语法
- smali语法
- smali语法
- Smali语法
- Smali语法
- smali语法
- smali语法
- smali语法
- smali语法
- Smali语法
- smali语法
- smali语法
- smali语法
- smali文件语法参考
- SMALI语法点滴
- 设计模式之原型模式(Prototype Pattern)
- sicily 1100. Tennis Anyone?
- Android Studio经典教程
- c++中如何给函数传递数组参数
- poj3258 二分好题,最大化最小值
- smali语法中的访问标记(accessflags)
- multithreading--synchronized对象锁以及对象的notify(),notifyAll(),wait()等的用法
- Hadoop WordCount 详解
- Gradle App项目的多渠道打包实现
- [Django数据库模型]Django用原始SQL进行Insert/Update操作
- poj2486 Apple Tree
- 黑马程序员------面向对象
- 连载《一个程序猿的生命周期》- 前言 (注:为什么写“一个程序猿的生命周期”)
- sicily 1122. Prerequisites?