国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 反編譯 smail語法基礎

2019-11-08 00:18:57
字體:
來源:轉載
供稿:網友

數據類型

1. 基本數據類型

    Z boolean    B byte    S short    C char    I int    J long (64 bits)    F float    D double (64 bits)

    V void  返回值類型

2.引用數據類型

  對象 

   以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對象數組。

方法

方法表示形式:Lpackage/name/ObjectName;-> MethodName(III)Z

在上面的例子中,Lpackage/name/ObjectName;表示類型,MethodName是方法名。III為參數(在此是3個整型參數),Z是返回類型(bool型)。

方法的參數是一個接一個的,中間沒有隔開。

一個更復雜的例子:method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

在java中則為:String method(int, int[][], int, String, Object[])

寄存器

java變量存放在內存中,android中變量放在寄存器中,為了提高性能

寄存器為32位,可以支持任何類型,其中long和doubble是64位的,需要使用兩個寄存器保存

寄存器采用v和p來命名v表示本地寄存器,p表示參數寄存器,關系如下

如果一個方法有兩個本地變量,有三個參數

v0 第一個本地寄存器v1 第二個本地寄存器v2 p0 (this)v3 p1 第一個參數v4 p2 第二個參數v5 p3 第三個參數

當然,如果是靜態方法的話就只有5個寄存器了,不需要存this了。

.registers 使用這個指令指定方法中寄存器的總數.locals 使用這個指定表明方法中非參寄存器的總數,放在方法的第一行。

聲明成員

PRivate TextView mTextView;

.field private mTextView:Landroid/widget/TextView;

指令執行

move v0, v3 #把v3寄存器的值移動到寄存器v0上.

const v0, 0x1 #把值0x1賦值到寄存器v0上。

invoke-static {v4, v5}, Lme/isming/myapplication/MainActivity;->sum(II)I 

#執行方法sum(),v4,v5的值分別作為sum的參數。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 资溪县| 贵定县| 文成县| 通山县| 榆林市| 前郭尔| 龙胜| 宝丰县| 亚东县| 大庆市| 万全县| 平远县| 松原市| 永吉县| 镇江市| 通榆县| 莆田市| 甘南县| 乐清市| 互助| 长垣县| 绥芬河市| 武穴市| 海伦市| 客服| 驻马店市| 漠河县| 开鲁县| 济宁市| 司法| 蕲春县| 罗平县| 安西县| 阿瓦提县| 沭阳县| 库伦旗| 镇赉县| 丹阳市| 通河县| 平度市| 南乐县|