成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android反編譯:smali語(yǔ)法

瀏覽:9日期:2022-09-27 16:17:32
前言

前面我們有說(shuō)過(guò)android反編譯的工具,如何進(jìn)行反編譯。反編譯后可以得到j(luò)ar或者得到smali文件。Android采用的是java語(yǔ)言進(jìn)行開(kāi)發(fā),但是Android系統(tǒng)有自己的虛擬機(jī)Dalvik,代碼編譯最終不是采用的java的class,而是使用的smali。我們反編譯得到的代碼,jar的話可能很多地方無(wú)法正確的解釋出來(lái),如果我們反編譯的是smali則可以正確的理解程序的意思。因此,我們有必要熟悉smali語(yǔ)法。

類型的表示

java里面包含兩種類型,原始類型和引用類型(包括對(duì)象),同時(shí)映射到smali也是有這兩大類型。

原始類型

V void (只能用于返回值類型)Z booleanB byteS shortC charI intJ longF floatD Double

對(duì)象類型

Lpackage/name/ObjectName; 相當(dāng)于java中的package.name.ObjectName

L 表示這是一個(gè)對(duì)象類型package/name 該對(duì)象所在的包ObjectName 對(duì)象名稱; 標(biāo)識(shí)對(duì)象名稱的結(jié)束

數(shù)組的表示

[I 表示一個(gè)int型的一維數(shù)組,相當(dāng)于int[];增加一個(gè)維度增加一個(gè)[,如[[I表示int[][]

數(shù)組每一個(gè)維度最多255個(gè);

對(duì)象數(shù)組表示也是類似,如String數(shù)組的表示是[Ljava/lang/String

寄存器與變量

java中變量都是存放在內(nèi)存中的,android為了提高性能,變量都是存放在寄存器中的,寄存器為32位,可以支持任何類型,其中l(wèi)ong和double是64為的,需要使用兩個(gè)寄存器保存。

寄存器采用v和p來(lái)命名v表示本地寄存器,p表示參數(shù)寄存器,關(guān)系如下

如果一個(gè)方法有兩個(gè)本地變量,有三個(gè)參數(shù)

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

當(dāng)然,如果是靜態(tài)方法的話就只有5個(gè)寄存器了,不需要存this了。

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

方法和字段的表示方法簽名

methodName(III)Lpackage/name/ObjectName;

如果做過(guò)ndk開(kāi)發(fā)的對(duì)于這樣的簽名應(yīng)該很熟悉的,就是這樣來(lái)標(biāo)識(shí)一個(gè)方法的。上面methodName標(biāo)識(shí)方法名,III表示三個(gè)整形參數(shù),Lpackage/name/ObjectName;表示返回值的類型。

方法的表示

Lpackage/name/ObjectName;——>methodName(III)Z即 package.name.ObjectName中的 function boolean methondName(int a, int b, int c) 類似這樣子

字段的表示

Lpackage/name/ObjectName;——>FieldName:Ljava/lang/String;

即表示: 包名,字段名和各字段類型

方法的定義

比如我下面的一個(gè)方法

private static int sum(int a, int b) {return a+b;}

使用編譯后是這樣

.method private static sum(II)I .locals 4 #表示需要申請(qǐng)4個(gè)本地寄存器 .parameter .parameter #這里表示有兩個(gè)參數(shù) .prologue .line 27 move v0, p0 .local v0, a:I move v1, p1 .local v1, b:I move v2, v0 move v3, v1 add-int/2addr v2, v3 move v0, v2 .end local v0 #a:I return v0.end method

從上面可以看到函數(shù)聲明使用.method開(kāi)始 .end method結(jié)束,java中的關(guān)鍵詞private,static 等都可以使用,同時(shí)使用簽名來(lái)表示唯一的方法,這里是sum(II)I。

聲明成員

.field private name:Lpackage/name/ObjectName;比如:private TextView mTextView;表示就是.field private mTextView:Landroid/widget/TextView;private int mCount;.field private mCount:I

指令執(zhí)行

smali字節(jié)碼是類似于匯編的,如果你有匯編基礎(chǔ),理解起來(lái)是非常容易的。

比如:move v0, v3 #把v3寄存器的值移動(dòng)到寄存器v0上.

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

invoke-static {v4, v5}, Lme/isming/myapplication/MainActivity;->sum(II)I #執(zhí)行方法sum(),v4,v5的值分別作為sum的參數(shù)。

其他

通過(guò)前面我們可以看到,smali就是類似匯編,其中很多命令,我們可以去查它的手冊(cè)來(lái)一一對(duì)應(yīng)。學(xué)習(xí)時(shí),我們可以自己寫(xiě)一個(gè)比較簡(jiǎn)單的java文件,然后轉(zhuǎn)成smali文件來(lái)對(duì)照學(xué)習(xí)。

下面,我貼一個(gè)我寫(xiě)的一個(gè)比較簡(jiǎn)單的java文件以及其對(duì)應(yīng)的smali,其中包含if判斷和for循環(huán)。

java文件:

package me.isming.myapplication;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class MainActivity extends ActionBarActivity { private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView = (TextView) findViewById(R.id.text);mTextView.setText('a+b=' + sum(1,2) + 'a>b?' + max(1,2) + '5 accumulate:' + accumulate(5)); } private static int sum(int a, int b) {return a+b; } private boolean max(int a, int b) {if (a > b) { return true;} else { return false;} } private int accumulate(int a) {if (a <= 0) { return 0;}int sum = 0;for(int i = 0; i <= a; i++) { sum += a;}return sum; }}

對(duì)應(yīng)的smali:

.class public Lme/isming/myapplication/MainActivity;.super Landroid/support/v7/app/ActionBarActivity;.source 'MainActivity.java'# instance fields.field private mTextView:Landroid/widget/TextView;# direct methods.method public constructor <init>()V .locals 2 .prologue .line 10 move-object v0, p0 .local v0, this:Lme/isming/myapplication/MainActivity; move-object v1, v0 invoke-direct {v1}, Landroid/support/v7/app/ActionBarActivity;-><init>()V return-void.end method.method private accumulate(I)I .locals 6 .parameter .prologue .line 39 move-object v0, p0 .local v0, this:Lme/isming/myapplication/MainActivity; move v1, p1 .local v1, a:I move v4, v1 if-gtz v4, :cond_0 .line 40 const/4 v4, 0x0 move v0, v4 .line 46 .end local v0 #this:Lme/isming/myapplication/MainActivity; :goto_0 return v0 .line 42 .restart local v0 #this:Lme/isming/myapplication/MainActivity; :cond_0 const/4 v4, 0x0 move v2, v4 .line 43 .local v2, sum:I const/4 v4, 0x0 move v3, v4 .local v3, i:I :goto_1 move v4, v3 move v5, v1 if-gt v4, v5, :cond_1 .line 44 move v4, v2 move v5, v1 add-int/2addr v4, v5 move v2, v4 .line 43 add-int/lit8 v3, v3, 0x1 goto :goto_1 .line 46 :cond_1 move v4, v2 move v0, v4 goto :goto_0.end method.method private max(II)Z .locals 5 .parameter .parameter .prologue .line 31 move-object v0, p0 .local v0, this:Lme/isming/myapplication/MainActivity; move v1, p1 .local v1, a:I move v2, p2 .local v2, b:I move v3, v1 move v4, v2 if-le v3, v4, :cond_0 .line 32 const/4 v3, 0x1 move v0, v3 .line 34 .end local v0 #this:Lme/isming/myapplication/MainActivity; :goto_0 return v0 .restart local v0 #this:Lme/isming/myapplication/MainActivity; :cond_0 const/4 v3, 0x0 move v0, v3 goto :goto_0.end method.method private static sum(II)I .locals 4 .parameter .parameter .prologue .line 27 move v0, p0 .local v0, a:I move v1, p1 .local v1, b:I move v2, v0 move v3, v1 add-int/2addr v2, v3 move v0, v2 .end local v0 #a:I return v0.end method# virtual methods.method protected onCreate(Landroid/os/Bundle;)V .locals 8 .parameter .prologue .line 16 move-object v0, p0 .local v0, this:Lme/isming/myapplication/MainActivity; move-object v1, p1 .local v1, savedInstanceState:Landroid/os/Bundle; move-object v2, v0 move-object v3, v1 invoke-super {v2, v3}, Landroid/support/v7/app/ActionBarActivity;->onCreate(Landroid/os/Bundle;)V .line 17 move-object v2, v0 const v3, 0x7f030017 invoke-virtual {v2, v3}, Lme/isming/myapplication/MainActivity;->setContentView(I)V .line 19 move-object v2, v0 move-object v3, v0 const v4, 0x7f08003f invoke-virtual {v3, v4}, Lme/isming/myapplication/MainActivity;->findViewById(I)Landroid/view/View; move-result-object v3 check-cast v3, Landroid/widget/TextView; iput-object v3, v2, Lme/isming/myapplication/MainActivity;->mTextView:Landroid/widget/TextView; .line 21 move-object v2, v0 iget-object v2, v2, Lme/isming/myapplication/MainActivity;->mTextView:Landroid/widget/TextView; new-instance v3, Ljava/lang/StringBuilder; move-object v7, v3 move-object v3, v7 move-object v4, v7 invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V const-string v4, 'a+b=' invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 const/4 v4, 0x1 const/4 v5, 0x2 invoke-static {v4, v5}, Lme/isming/myapplication/MainActivity;->sum(II)I move-result v4 invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v3 const-string v4, 'a>b?' invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 move-object v4, v0 const/4 v5, 0x1 const/4 v6, 0x2 invoke-direct {v4, v5, v6}, Lme/isming/myapplication/MainActivity;->max(II)Z move-result v4 invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder; move-result-object v3 const-string v4, '5 accumulate:' invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 move-object v4, v0 const/4 v5, 0x5 invoke-direct {v4, v5}, Lme/isming/myapplication/MainActivity;->accumulate(I)I move-result v4 invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 invoke-virtual {v2, v3}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V .line 23 return-void.end method參考資料

最后附上一些參考資料:

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

https://code.google.com/p/smali/w/list

http://www.miui.com/thread-409543-1-1.html

標(biāo)簽: Android
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲国产精品精华液网站| 狠狠v欧美v日韩v亚洲ⅴ| 国产一区二三区好的| 久久精品在线观看| 欧美亚日韩国产aⅴ精品中极品| 丁香婷婷综合五月| 亚洲精品久久久蜜桃| 精品电影一区二区| 欧美日韩一区二区在线观看视频| 欧美国产专区| 国产一区二区三区精品欧美日韩一区二区三区 | 精品美女在线播放| 久久国产手机看片| 欧美日本国产| 懂色av一区二区三区蜜臀| 日韩高清在线一区| 亚洲国产视频a| 亚洲欧洲无码一区二区三区| 欧美一级黄色录像| 久久夜色精品| 国产日韩欧美在线播放不卡| 欧美精品黄色| 91啪亚洲精品| 99久久精品免费看国产| 高清国产一区二区| 懂色av一区二区三区免费观看| 黄色小说综合网站| 久久99久久久欧美国产| 视频一区视频二区中文字幕| 一区二区三区小说| 亚洲国产精品久久人人爱蜜臀| 国产精品动漫网站| 国产精品美女久久久久aⅴ国产馆| 欧美一级日韩免费不卡| 在线观看av一区二区| 性色av一区二区怡红| 国产精品美女久久久浪潮软件| 粉嫩在线一区二区三区视频| 国产精品77777竹菊影视小说| 精品无码三级在线观看视频| 久久99精品久久久久久| 久久成人羞羞网站| 国产美女视频一区| 国产精品一色哟哟哟| 蜜臀av性久久久久蜜臀aⅴ| 亚洲成人黄色小说| 首页国产丝袜综合| 日韩精品高清不卡| 久久精品免费看| 国产乱码精品一区二区三区av| 国产馆精品极品| 99久久久久免费精品国产| 欧美永久精品| 一本一本久久| 欧美色图免费看| 欧美成人女星排行榜| 欧美精品一区二区三区四区| 国产视频一区在线播放| 国产精品成人免费在线| 亚洲精品国产无套在线观| 天天综合网天天综合色| 国产精品白丝av| 91首页免费视频| 国产精品亚洲综合色区韩国| 欧美性三三影院| 久久久久高清精品| ㊣最新国产の精品bt伙计久久| 中文字幕制服丝袜成人av | 久久综合伊人| 精品卡一卡二卡三卡四在线| 国产精品精品国产色婷婷| 亚洲激情自拍视频| 狠狠色综合日日| 黑丝一区二区| 欧美综合色免费| 亚洲精品在线免费播放| 一区二区三区久久| 国产精品18久久久久久久久| 亚洲国产精品一区在线观看不卡| 日本韩国精品一区二区在线观看| 久久久一区二区三区| 亚洲va韩国va欧美va精品 | 欧美国产一区二区在线观看| 日本成人在线不卡视频| 成人精品高清在线| 亚洲精品黄色| 精品久久久久久久一区二区蜜臀| 亚洲成人av一区二区三区| 东方aⅴ免费观看久久av| 国产乱码精品| 久久众筹精品私拍模特| 秋霞影院一区二区| 在线精品一区| 欧美综合亚洲图片综合区| 亚洲欧洲精品一区二区三区不卡| 免费成人你懂的| 欧美日韩一区二区三区在线视频 | 日韩av一级片| 雨宫琴音一区二区在线| 欧美影院一区二区| 国产欧美日韩激情| 国产精品影视在线观看| 六月丁香综合| 中文字幕日韩一区| 成人综合日日夜夜| 精品视频一区 二区 三区| 亚洲一二三区视频在线观看| 亚洲精品在线免费播放| 另类av一区二区| 国产精品vip| 国产.精品.日韩.另类.中文.在线.播放| 亚洲国产精品一区二区尤物区| 亚洲欧洲日本一区二区三区| 欧美日韩精品欧美日韩精品一| 亚洲乱码一区二区三区在线观看| 欧美激情1区2区| 26uuuu精品一区二区| 国产成人精品免费一区二区| 欧美日韩精品电影| 久久99热国产| 欧美精品黑人性xxxx| 激情小说欧美图片| 欧美在线观看18| 美日韩一区二区三区| 黄色免费成人| 亚洲精品综合在线| 免费日韩av片| 亚洲国产美女搞黄色| 欧美亚洲免费在线| 亚洲成a人v欧美综合天堂| 国产亚洲精品久久久久婷婷瑜伽| 亚洲天堂网中文字| 一本一本a久久| 夜夜嗨av一区二区三区网页| 亚洲福利一区| 亚洲综合999| 久热re这里精品视频在线6| 午夜成人免费视频| 欧美亚洲自拍偷拍| 国内精品免费**视频| 69成人精品免费视频| av中文一区二区三区| 国产精品黄色在线观看| 1000部精品久久久久久久久| 亚洲精品第1页| 久久成人国产| 久久国产精品色婷婷| 日韩欧美精品三级| 91丨九色丨黑人外教| 亚洲天堂成人网| 国产欧美一区二区视频| 日韩有码一区二区三区| 欧美最新大片在线看| 成人app软件下载大全免费| 国产三级一区二区| 国产精品美女久久久久aⅴ| 亚洲国产日韩综合一区| 一本到不卡精品视频在线观看| 欧日韩精品视频| 欧美日韩亚洲综合| 久久影院午夜论| 成人欧美一区二区三区黑人麻豆 | 99精品国产在热久久下载| 激情欧美一区| 欧美日韩综合精品| 欧美另类女人| 欧美精品二区三区四区免费看视频| 99免费精品视频| jlzzjlzz亚洲日本少妇| 不卡一区二区在线| 国产福利一区二区三区| 国产精品中文有码| 国产成人亚洲精品青草天美| 国产东北露脸精品视频| 国产91露脸合集magnet| 成人激情小说乱人伦| 99视频有精品| 91麻豆视频网站| 国产精品s色| 在线成人欧美| 国产欧美高清| 一本色道亚洲精品aⅴ| 欧美三级电影在线观看| 制服丝袜亚洲播放| 欧美mv日韩mv国产网站| 精品久久一区二区三区| 国产网红主播福利一区二区| 国产精品视频一二| 国产精品免费免费| 亚洲美女在线国产| 午夜国产精品一区| 极品瑜伽女神91| 欧美裸体bbwbbwbbw| 91视频国产资源| 精品亚洲成a人| 天天av天天翘天天综合网色鬼国产 | 午夜一区二区三视频在线观看 | 欧洲精品视频在线观看| 亚洲久久一区| 欧美高清视频一区|