亚洲乱码一卡二卡四卡乱码新区_亚洲乱码中文字幕小综合_亚洲人成电影在线播放_亚洲性色AV一区二区三区_亚洲一区二区三区影院_亚洲中文字幕久久精品无码A_亚洲中文字幕无码专区_伊人热热久久原色播放WWW_在线观看AV永久免费_最新欧洲大片免费在线,欧美日韩成人三级免费看,久久黄色网址,欧美激情内射喷水高潮

0x4.smali語法介紹

0x4.smali語法介紹


本文主要從理論上介紹一下smali語法,,以及smali語法的關(guān)鍵指令,、smali語法的基本分析思路。提綱如下:

先附上smali語法的中文文檔,,https://pan.baidu.com/s/1kWUahN5  密碼: mghq
接下來我們逐一進(jìn)行介紹:

0x1.smali是什么
apk文件通過Android Killer反編譯后,java會被轉(zhuǎn)化為smali存放在smali文件夾,。
smali語言是Davlik的寄存器語言,,語法上和匯編語言相似,smali語言基于寄存器,,在smali里的所有操作都必須經(jīng)過寄存器來進(jìn)行,。 

0x2.關(guān)鍵指令
在我看來,smali的關(guān)鍵指令有三個,,分別是 const,、if、invoke,。
(各指令均可在文章開篇共享的中文文檔中找到,,下面只做簡單介紹,具體請參考文檔)

2.1  const語句
const是常量的意思,,所以const語句通常用來將常量的存入寄存器,,我們可以理解為賦值。
- 如果是存入整型數(shù)據(jù),,則使用 const v0,10
    此處v0為寄存器,,也可以將數(shù)據(jù)存放于其他寄存器,10為整數(shù)型數(shù)據(jù),。
- 如果是存入字符串?dāng)?shù)據(jù),,則使用 const v1,“smali”
    此處v1為寄存器,,“smali”為字符串?dāng)?shù)據(jù),。

2.2  if語句
if是如果的意思,所以它是一個判斷語句,,這是在smali中使用最多的一個判斷語句,,被廣泛運用在判斷及循環(huán)等情景中。

2.2.1  if-eq語句
這里eq的意思是equal,,也就是相等的意思,。
比如判斷兩個寄存器中的值,if-eq v0,v1 :cond 1
這句的意思是,,如果v0等于v1,,則跳轉(zhuǎn)到cond 1,否則繼續(xù)往下執(zhí)行,。

2.2.2  if-ne語句
知道了eq的意思,,那么ne的意思也就明白了,是not equal的意思,,也就是不相等,。
例句 if-ne v0,v1 :cond 1
含義請大家自己理解,。

2.2.3  if-eqz語句
此處eqz的意思為 equal zero,就是說等于零,。
例句 if-eqz v0 :cond 1
這句的意思是,,如果v0等于0,則跳轉(zhuǎn)到cond 1,,否則繼續(xù)往下執(zhí)行,。

2.2.4  if-nez語句
nez的意思我們可以很容易的得出是not equal zero,不等于零,。
例句 if-nez v0 :cond 1
含義請大家自己理解,。

2.3  invoke語句
invoke是調(diào)用的意思,主要用于函數(shù)的調(diào)用,。這里介紹兩種,,invoke-direct 和 invoke-virtual。

2.3.1 invoke-direct   不解析直接調(diào)用帶參數(shù)的方法,。
2.3.2 invoke-virtual   調(diào)用帶參數(shù)的虛擬方法 ,。



請結(jié)合smali中文文檔理解各種調(diào)用的含義。

0x3.邏輯分析
常用在邏輯分析中的語句為if語句和goto(直接跳轉(zhuǎn))語句,。此處我們以實例來講解:



如圖所示,,在判斷v0是否等于0之后會進(jìn)行跳轉(zhuǎn),我們可以根據(jù)情況修改v0或者改變判斷函數(shù),,
比如在判斷前 const v0,0    或者  將判斷變更為 if-nez    亦或者直接進(jìn)行g(shù)oto直接跳轉(zhuǎn),。

----------請大家在實際的smali分析中,多分析實際語句含義和邏輯,,不要只是看,,邏輯理清楚后,我們才能更清晰的去破解實現(xiàn)我們需要的功能,。

?