- 这感觉就像是最初看汇编的感觉一样一样的
-
1.Dalvik使用的寄存器是32位的,64位类型用两个<相邻>寄存器表示
2.Dalvik由65535个虚拟寄存器
3.这取消了栈结构使用,采用寄存器来存放值的设定特别奇怪 -
假设这个函数由M个寄存器,N个参数,根据Dalvik规定,参数使用后面N个寄存器,局部变量从v0开始取M-N个寄存器
比如一个函数使用了5个寄存器,2个显式的整形,3个参数,局部变量使用前2个,参数用后面3个 -
关于Java类,Dalvik字节码用L表示,这些类在Java代码中用packname.name.ObjectName 方式引用.
其中packname/name表示对象所在的包,ObjectName表示对象的名称
举个小例子
method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
I表示int ,这句话翻译成Java代码就是,II就是二维int数组
String method(int int[][] String, Object[]) -
检测到一大堆汇编语句
move VA VB VA=VB,都是四位
move-wide VA,VB 为4位的寄存器!对 !赋值 都是四位
有一堆关于寄存器位数的就不累述了。
move-object 为对象赋值
move-result VA 将上一个invoke类型操作指令的非对象结果赋值
invoke 是返回一个**类型的对象。
这就必须要再来看看方法调用指令,
invoke-viretual 调用实例的虚方法
invoke-super 调用实例的父方法
invoke-direct 直接调用实例的直接方法(构造方法?)
invoke-static 调用实例的静态方法。
invoke-interface 调用实例的接口方法 -
这其实省略了跳转还有定义数据,总觉得要搬运到博客上量太大,于是就自己看咯~
不明真相的Dalvik
本文标题:不明真相的Dalvik
文章作者:A2ir
发布时间:2016年09月29日 - 13时28分
最后更新:2016年09月29日 - 13时27分
原始链接:http://yoursite.com/2016/09/29/不明真相的Dalvik语法/
许可协议: "署名-非商用-相同方式共享 3.0" 转载请保留原文链接及作者。
Android程序生成与Dex结构相关(简略)
亲爱的生日快乐
>