`

android反编译----smali Wiki翻译--类型方法和域

阅读更多

类型,方法和域

dalvik 字节码关于类型,方法和域的基本信息

 

类型 Types

dalvik字节码有两种主要的类型,值类型(原始类型)和引用类型。引用类型时对象和数组,其他的都是值类型。

 

原始类型用一个单独的字母表示。你可以从AOSP找到delvik字节码每个字母所代表的原始类型:dalvik/docs/dex-format.html 

 

V      void - can only be used for return types
Z boolean
B byte
S short
C char
I int
J long(64bits)
F float
D double(64bits)

 

对象类型的格式类似于Lpackage/name/ObjectName; 前缀L代表这是一个对象类型,package/name/是这个对象所在的包,ObjectName是这个对象的的对象名称,;代表这个对象名称的结束。这个java中的package.name.ObjectName是等效的。一个具体的列子是Ljava/lang/String;和java.lang.String是等效的。

数组的类型采用类似[I--整形的一维数组,即java中的int[]的。对于多维数组,就是增加[字符。如,[[I = int[] [], [[[I = int [] [] [](注意:最大的维数时255).

对象的数组,可以这样表示,例如:[Ljava/lang/String; == String[]

 

 

 

方法 Methods

方法的描述总是包括:包含此方法的类型,方法的名称,参数的类型,返回的类型。所有的这些信息是为了虚拟机能够找到正确的方法,并能够在字节码上执行静态分析(达到检查和优化的目的)。

格式为:

Lpackage/name/ObjectName;->MethodName(III)Z

在这个例子中,你能够知道Lpackage/name/ObjectName是一个类型,很明显MethodName是方法名,(III)Z是改方法的特征,III是方法的三个参数(在这个例子中是三个整数),Z是改方法的返回值(bool)。

下面是一个复杂的例子:

 

method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

 

在java中,它的意思是:

String method(int, int [] [] , int, String, Object[] ) 

 

 

域 Fileds

域总是描述成包含:包含此域的类型,域的名字,域的类型。再一次说明,这样描述是为了虚拟机能够正确的找到这个域,同样的是为了执行字节码静态分析。

格式为:

Lpackage/name/ObjectName;->FileName:Ljava/langString;

这个很容易解释 ,三部分分别是:包名,域名,域名的类型。

 

 

参考官方原文:

http://code.google.com/p/smali/wiki/TypesMethodsAndFields

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics