Smali 語法

1窘俺、基礎(chǔ)

1、變量類型

B—byte
C—char
D—double
F—float
I—int
S—short
V—void
J—long
Z—boolean

2、運(yùn)算符

Smali 含義 符號(hào)
eq equals ==
ne not equals !=
lt less than <
gt bigger than >
le less and equals <=
ge bigger and equals >=
eqz equals zero =0
nez not equals zero !=0
ltz less than zero <0
btz bigger than zero >0
gez bigger and equals zero >=0
lez less and equals zero <=0

3、關(guān)鍵字

// L 代表一個(gè)對象類型
//.class 表示一個(gè)類痢畜,pulic 代表公有 敛熬,后面是全包名
// ; 分號(hào)作為語句結(jié)尾 
.class public Lcom/zk/demo/MainActivity;
//.super 表示父類
.super Landroid/support/v7/app/AppCompatActivity; 
//.source 代表類所在的文件名
.source "MainActivity.java"
// # 聲明
// .implements (實(shí)現(xiàn)接口 一般在文件頂部) <實(shí)現(xiàn)的接口>
# interfaces
.implements Ljava/lang/Runnable;

// 直屬方法 當(dāng)前類所有的肺稀,不可被覆寫的方法 一般是 私有/靜態(tài)方法、及靜態(tài)構(gòu)造方法
# direct methods
// 虛方法 當(dāng)前類實(shí)現(xiàn)应民,但是可以被 子類覆寫的方法话原,多為 public/protect/inteface 的方法
# virtual methods

//代碼所屬行數(shù)
. line
// 局部變量 寄存器申請數(shù)
.locals N 
// 方法的形參 非靜態(tài)參數(shù) p0 代指this ; p1 代指第一個(gè)形參 ,靜態(tài)函數(shù) p0 代指第一個(gè)參數(shù)
// .param [形參變量][形參名][形參類型]
.param p1, "msg"    # Ljava/lang/String;
//方法開始位置
.prologue
// 結(jié)束位置
.end field / mehod / annotation
//創(chuàng)建實(shí)例 new-instance v1, Lcom/example/zhaokai/demo/Test;
new-instance
// 獲取 變量
sget-object
// 賦值
iput-object

4诲锹、字段

// # 后面跟聲明 標(biāo)識(shí)接下來的類型 <static 靜態(tài)> 繁仁、<instance 實(shí)例>
# instance fields
.field private isPayTest:Z
# static fields

// .field 表示后面跟的是字段類型,結(jié)合上面語句代表 當(dāng)前字段
//REQUEST_CODE 是個(gè)私有靜態(tài)的int類型
// : 前面是字段名稱归园,后面則是字段類型 改备,= 后面則是字段的賦值
// 格式 .field <訪問權(quán)限> <靜態(tài)> <不可更改> <變量名> : <變量類型> = <賦值>  
.field private static final REQUEST_CODE:I = 0x186b4      

5、方法

//.method [方法權(quán)限]{[abstract/static/final] [varargs] }[方法名](形參類型 形參類型)[返回值類型]
.method protected setMsg(Ljava/lang/String;Ljava/lang/String;)V
    //方法內(nèi)局部變量數(shù)(不包含形參)
    .locals 1
    .param p1, "msg"    # Ljava/lang/String;
    // 形參 可變形參 用數(shù)組標(biāo)識(shí) #[Ljava/lang/String;
    // 行數(shù)
    .line 31
    //…… 執(zhí)行方法
    .line 32
    return-void 
    //無返回值 returen-object 返回指定值
//方法結(jié)束
.end method

6蔓倍、局部變量

//本地寄存器(local register悬钳,非參寄存器)用v開頭數(shù)字結(jié)尾的符號(hào)來表示,如v0偶翅、v1默勾、v2、…聚谁,
// locals 1  對應(yīng)一個(gè)本地寄存  v0
//參數(shù)寄存器(parameter register)用p開頭數(shù)字結(jié)尾的符號(hào)來表示母剥,如p0、p1形导、p2环疼、…,p0 默認(rèn)為this

7朵耕、賦值獲取

sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
//獲取參數(shù)值 變量名,對象類型 -> 獲取方法 : 獲取對象類型
iput-boolean v0, p0, Lcom/example/zhaokai/demo/Test;->isTest:Z
//給參數(shù)賦值
sget/sput: static 對已標(biāo)識(shí)的靜態(tài)字段執(zhí)行已確定的對象靜態(tài)字段運(yùn)算
iget/iput: instance 對已標(biāo)識(shí)的字段執(zhí)行已確定的對象實(shí)例字段運(yùn)算
aget/aput: array 在給定數(shù)組的已標(biāo)識(shí)索引處執(zhí)行已確定的數(shù)組運(yùn)算

sget-類型 [wide/boolean/object/byte/char/short]

8炫隶、方法執(zhí)行

//返回值
move-result-object v3
//調(diào)用指定的方法。所得結(jié)果(如果有的話)可能與緊跟其后的相應(yīng) move-result* 變體指令一起存儲(chǔ)阎曹。

invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V
//使用 invoke-virtual 調(diào)用正常的虛方法(該方法不是 private伪阶、static 或 final,也不是構(gòu)造函數(shù))

invoke-direct {v0, v1}, Lcom/example/zhaokai/demo/Test;->print(Ljava/lang/String;)Ljava/lang/String;
//invoke-direct 用于調(diào)用非 static 直接方法(也就是說处嫌,本質(zhì)上不可覆蓋的實(shí)例方法栅贴,
// 即 private 實(shí)例方法或構(gòu)造函數(shù))

invoke-static {v2}, Lcom/example/zhaokai/demo/Test;->setVERSION(Ljava/lang/String;)V
//invoke-static 用于調(diào)用 static 方法(該方法始終被視為直接方法)。

invoke-interface {v0}, Ljava/lang/Runnable;->run()V
//invoke-interface 用于調(diào)用 interface 方法熏迹,也就是說檐薯,在具體類未知的對象上,使用引用 interface 的 method_id注暗。

invoke-super {p0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
//invoke-super 來調(diào)用在該接口上定義的該方法的最具體坛缕、未被覆蓋版

9墓猎、常用語句

//日志輸出
const-string v2, "push"
.local v2, "tag":Ljava/lang/String;
invoke-static {v2, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

10、smali 文件結(jié)構(gòu)

// 當(dāng)前類名:.class public Lcom/kwai/game/ddz/MainActivity;
// 父類:.super Lcom/unity3d/player/UnityPlayerActivity;
// 文件名:.source "MainActivity.java"
# static fields
//靜態(tài)字段  finish 會(huì)賦值祷膳、其他則只聲明

# instance fields
//實(shí)例字段

# direct methods
.method static constructor <clinit>()V
//靜態(tài)構(gòu)造函數(shù)<靜態(tài)代碼塊><靜態(tài)初始化>

.method public constructor <init>()V
//實(shí)例構(gòu)造函數(shù)

//其他方法
# virtual methods
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屡立,隨后出現(xiàn)的幾起案子直晨,更是在濱河造成了極大的恐慌,老刑警劉巖膨俐,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勇皇,死亡現(xiàn)場離奇詭異,居然都是意外死亡焚刺,警方通過查閱死者的電腦和手機(jī)敛摘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乳愉,“玉大人兄淫,你說我怎么就攤上這事÷Γ” “怎么了捕虽?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坡脐。 經(jīng)常有香客問我泄私,道長,這世上最難降的妖魔是什么备闲? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任晌端,我火速辦了婚禮,結(jié)果婚禮上恬砂,老公的妹妹穿的比我還像新娘咧纠。我一直安慰自己,他們只是感情好泻骤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布惧盹。 她就那樣靜靜地躺著,像睡著了一般瞪讼。 火紅的嫁衣襯著肌膚如雪钧椰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天符欠,我揣著相機(jī)與錄音嫡霞,去河邊找鬼。 笑死希柿,一個(gè)胖子當(dāng)著我的面吹牛诊沪,可吹牛的內(nèi)容都是我干的养筒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼端姚,長吁一口氣:“原來是場噩夢啊……” “哼晕粪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渐裸,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巫湘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后昏鹃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尚氛,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年洞渤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阅嘶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡载迄,死狀恐怖讯柔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情护昧,我是刑警寧澤磷杏,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站捏卓,受9級特大地震影響极祸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怠晴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一遥金、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒜田,春花似錦稿械、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梯捕,卻和暖如春厢呵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背傀顾。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工襟铭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓寒砖,卻偏偏與公主長得像赐劣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子哩都,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)魁兼,也就是一...
    悟名先生閱讀 4,149評論 0 13
  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚_t_閱讀 4,195評論 1 44
  • 一漠嵌、閱讀<<你的生命有什么可能>> 為自己而活咐汞,而不是因?yàn)樗嗽u價(jià)而活 什么都不想,盡全力將眼前的事做好献雅,做到極致...
    思遠(yuǎn)同學(xué)閱讀 129評論 0 0
  • 感恩今天的經(jīng)歷碉考,讓我看見自己,看見自己的恐懼,看見自己的現(xiàn)狀卢未,同時(shí)謝謝我自己皿桑,看見之后沒有陷入恐懼,擔(dān)心钦购,稍微...
    妮妮Gloria閱讀 255評論 0 2
  • <好教練> 從事武道教育這一行久了,就會(huì)聽到一些議論,說這個(gè)※不好贱傀,那個(gè)※不好,哈哈伊脓。 其實(shí)從教育的出發(fā)點(diǎn)來講府寒。 ...
    信教練閱讀 309評論 0 0