国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

安卓中常見(jiàn)的字節(jié)碼指令介紹

這篇具有很好參考價(jià)值的文章主要介紹了安卓中常見(jiàn)的字節(jié)碼指令介紹。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

問(wèn)題背景

安卓開(kāi)發(fā)過(guò)程中,經(jīng)常要通過(guò)看一些java代碼對(duì)應(yīng)的字節(jié)碼,來(lái)了解java代碼編譯后的運(yùn)行機(jī)制,本文將通過(guò)一個(gè)簡(jiǎn)單的demo介紹一些基本的字節(jié)碼指令。

問(wèn)題分析

比如以下代碼:

public class test {
    public static void main(String[] args) {
        int a = 100;
        int b = 100;
        int c = 100;
        a += b + c;
        System.out.println(a);
    }
}

運(yùn)行結(jié)果如下:
安卓中常見(jiàn)的字節(jié)碼指令介紹,移動(dòng)開(kāi)發(fā),android

a += b + c <==> a += (b + c),查看對(duì)應(yīng)的字節(jié)碼文件如下:

// class version 52.0 (52)
// access flags 0x21
public class test {

  // compiled from: test.java

  // access flags 0x1
  public <init>()V
   L0
    LINENUMBER 1 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init> ()V
    RETURN
   L1
    LOCALVARIABLE this Ltest; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1

  // access flags 0x9
  public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 3 L0
    BIPUSH 100
    ISTORE 1 // 將100存儲(chǔ)到局部變量
   L1
    LINENUMBER 4 L1
    BIPUSH 100
    ISTORE 2 // 將100存儲(chǔ)到局部變量
   L2
    LINENUMBER 5 L2
    BIPUSH 100
    ISTORE 3 // 將100存儲(chǔ)到局部變量
   L3
    LINENUMBER 6 L3
    ILOAD 1 // 從局部變量表中加載 int 類(lèi)型到操作數(shù)棧
    ILOAD 2 // 從局部變量表中加載 int 類(lèi)型到操作數(shù)棧
    ILOAD 3 // 從局部變量表中加載 int 類(lèi)型到操作數(shù)棧
    IADD // 將棧頂兩個(gè) int 類(lèi)型數(shù)值相加
    IADD // 將棧頂兩個(gè) int 類(lèi)型數(shù)值相加
    ISTORE 1 // 將 int 類(lèi)型存儲(chǔ)到局部變量中,這里就是把結(jié)果存儲(chǔ)到第一個(gè)變量
   L4
    LINENUMBER 7 L4
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    ILOAD 1
    INVOKEVIRTUAL java/io/PrintStream.println (I)V
   L5
    LINENUMBER 8 L5
    RETURN
   L6
    LOCALVARIABLE args [Ljava/lang/String; L0 L6 0
    LOCALVARIABLE a I L1 L6 1
    LOCALVARIABLE b I L2 L6 2
    LOCALVARIABLE c I L3 L6 3
    MAXSTACK = 3
    MAXLOCALS = 4
}

問(wèn)題總結(jié)

通過(guò)查看java代碼對(duì)應(yīng)的字節(jié)碼,可以比較清楚的看到j(luò)ava代碼編譯后的執(zhí)行流程。在安卓開(kāi)發(fā)中,了解字節(jié)碼知識(shí)還是非常有必要的,在關(guān)鍵時(shí)刻,我們查看字節(jié)碼,能夠很好的解答一些疑惑,下面是常見(jiàn)的一些字節(jié)碼指令:

1. 加載和存儲(chǔ)指令:

aload:從局部變量表中加載引用類(lèi)型到操作數(shù)棧。

astore:將引用類(lèi)型存儲(chǔ)到局部變量表中。

iload:從局部變量表中加載 int 類(lèi)型到操作數(shù)棧。

istore:將 int 類(lèi)型存儲(chǔ)到局部變量表中。

fload:從局部變量表中加載 float 類(lèi)型到操作數(shù)棧。

fstore:將 float 類(lèi)型存儲(chǔ)到局部變量表中。



2. 算術(shù)和邏輯指令:

iadd:將棧頂兩個(gè) int 類(lèi)型數(shù)值相加。

isub:將棧頂兩個(gè) int 類(lèi)型數(shù)值相減。

imul:將棧頂兩個(gè) int 類(lèi)型數(shù)值相乘。

idiv:將棧頂兩個(gè) int 類(lèi)型數(shù)值相除。

iand:將棧頂兩個(gè) int 類(lèi)型數(shù)值進(jìn)行按位與操作。

ior:將棧頂兩個(gè) int 類(lèi)型數(shù)值進(jìn)行按位或操作。



3. 類(lèi)型轉(zhuǎn)換指令:

i2l:將 int 類(lèi)型轉(zhuǎn)換為 long 類(lèi)型。

l2i:將 long 類(lèi)型轉(zhuǎn)換為 int 類(lèi)型。

f2d:將 float 類(lèi)型轉(zhuǎn)換為 double 類(lèi)型。

d2i:將 double 類(lèi)型轉(zhuǎn)換為 int 類(lèi)型。



4. 控制流指令:

if_icmpeq:如果兩個(gè) int 類(lèi)型數(shù)值相等,則跳轉(zhuǎn)到指定位置。

goto:無(wú)條件跳轉(zhuǎn)到指定位置。

tableswitch:根據(jù)索引值跳轉(zhuǎn)到不同位置的指令。



5. 方法調(diào)用和返回指令:

invokevirtual:調(diào)用實(shí)例方法。

invokestatic:調(diào)用靜態(tài)方法。

invokeinterface:調(diào)用接口方法。

ireturn:從方法中返回 int 類(lèi)型值。

invokedynamic: 運(yùn)行時(shí)動(dòng)態(tài)解析并綁定方法調(diào)用

持續(xù)更新,有興趣的小伙伴可以進(jìn)一步深入研究。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-642601.html

到了這里,關(guān)于安卓中常見(jiàn)的字節(jié)碼指令介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【ARM 常見(jiàn)匯編指令學(xué)習(xí) 8 - dsb sy 指令及 dsb 參數(shù)介紹】

    上篇文章:ARM 常見(jiàn)匯編指令學(xué)習(xí) 7 - LDR 指令與LDR偽指令及 mov指令 下篇文章:ARM 常見(jiàn)匯編指令學(xué)習(xí) 9 - 緩存管理指令 DC 與 IC 數(shù)據(jù)同步屏障是一種特殊類(lèi)型的內(nèi)存屏障。 只有當(dāng)DSB指令執(zhí)行完畢后,才會(huì)執(zhí)行程序中位于此指令后的指令。 當(dāng)滿足以下條件時(shí),此指令才會(huì)完成:

    2024年02月09日
    瀏覽(43)
  • 【ARM64 常見(jiàn)匯編指令學(xué)習(xí) 20 -- ARM 指令 .include與 .asciz 詳細(xì)介紹】

    在 ARM 匯編語(yǔ)言中, .include 命令用于插入另一個(gè)源文件的內(nèi)容。它的作用類(lèi)似于 C 語(yǔ)言中的 #include 預(yù)處理命令。這個(gè)命令通常在源文件的頂部使用,但也可以在任何地方使用。 語(yǔ)法如下: 這里的 \\\"filename\\\" 是你想要包含的文件名。這個(gè)文件名可以是絕對(duì)路徑,也可以是相對(duì)于

    2024年02月11日
    瀏覽(52)
  • 常見(jiàn)APP攻擊方法 以及防御方法介紹(移動(dòng)安全)

    常見(jiàn)APP攻擊方法 以及防御方法介紹(移動(dòng)安全)

    1、基于組件攻擊 - 應(yīng)用劫持 用戶打開(kāi)安卓手機(jī)上的某一應(yīng)用,這時(shí),惡意軟件偵測(cè)到用戶的這一動(dòng)作,如果立即彈出一個(gè)與該應(yīng)用類(lèi)似的界面,攔截了合法的應(yīng)用,用戶幾乎無(wú)法察覺(jué),該用戶接下輸入賬號(hào)、卡密什么的?其實(shí)是在惡意軟件上進(jìn)行的,接下來(lái)會(huì)發(fā)生什么就可想

    2023年04月09日
    瀏覽(21)
  • Unity開(kāi)發(fā)——移動(dòng)端實(shí)用特性使用(安卓/IOS)

    如何讓屏幕保持常亮?如何獲取手機(jī)當(dāng)前電量?如何…? 接下來(lái)列舉一些實(shí)用特性和方法: 1.防止屏幕休眠,從而讓屏幕保持常亮 SleepTimeout.NeverSleep是一個(gè)特殊的值,它會(huì)禁止屏幕進(jìn)入休眠狀態(tài),因此屏幕會(huì)保持常亮。 注意,這個(gè)設(shè)置可能會(huì)導(dǎo)致用戶的電池電量消耗增加 ,

    2024年02月15日
    瀏覽(88)
  • (一)專(zhuān)題介紹:移動(dòng)端安卓手機(jī)改造成linux服務(wù)器&linux服務(wù)器中安裝軟件、部署前后端分離項(xiàng)目實(shí)戰(zhàn)

    總體概述: 本篇文章隸屬于“手機(jī)改造服務(wù)器 部署前后端分離項(xiàng)目”系列專(zhuān)欄,該專(zhuān)欄將分多個(gè)板塊,每個(gè)板塊獨(dú)立成篇 來(lái)詳細(xì)記錄:手機(jī)(安卓)改造成個(gè)人服務(wù)器(Linux)、Linux中安裝軟件、配置開(kāi)發(fā)環(huán)境、部署JAVA+VUE+MySQL5.7前后端分離項(xiàng)目,以及內(nèi)網(wǎng)穿透實(shí)現(xiàn)外網(wǎng)訪問(wèn)等全過(guò)

    2024年02月04日
    瀏覽(21)
  • 安卓Android開(kāi)發(fā)快速入門(mén)

    安卓Android開(kāi)發(fā)快速入門(mén)

    配合天哥視頻食用更佳:【天哥】Android開(kāi)發(fā)視頻教程最新版 Android Studio開(kāi)發(fā) LinearLayout(線性布局) 可嵌套 最常用屬性 id 起標(biāo)記布局的作用 layout_width [wrap_content根據(jù)內(nèi)容選擇大小、match_parent匹配父級(jí)、具體數(shù)值(單位-dp)] layout_height layout_weight 權(quán)重,按照權(quán)重比例分配父級(jí)

    2023年04月16日
    瀏覽(44)
  • android原生開(kāi)發(fā)教程,安卓開(kāi)發(fā)入門(mén)到精通

    android原生開(kāi)發(fā)教程,安卓開(kāi)發(fā)入門(mén)到精通

    建造者模式: 觀察者模式: 代理模式: 門(mén)面模式: 單例模式: 生產(chǎn)者消費(fèi)者模式: 這個(gè)通過(guò)對(duì)比來(lái)描述,比如面向?qū)ο蠛兔嫦蜻^(guò)程的對(duì)比,針對(duì)這兩種思想的對(duì)比,還可以舉個(gè)開(kāi)發(fā)中的例子,比如播放器的實(shí)現(xiàn),面向過(guò)程的實(shí)現(xiàn)方式就是將播放視頻的這個(gè)功能分解成多個(gè)過(guò)

    2024年04月11日
    瀏覽(20)
  • 發(fā)布python模仿2023年全國(guó)職業(yè)的移動(dòng)應(yīng)用開(kāi)發(fā)賽項(xiàng)樣式開(kāi)發(fā)的開(kāi)源的新聞api,以及安卓接入案例代碼

    發(fā)布python模仿2023年全國(guó)職業(yè)的移動(dòng)應(yīng)用開(kāi)發(fā)賽項(xiàng)樣式開(kāi)發(fā)的開(kāi)源的新聞api,以及安卓接入案例代碼

    python模仿2023年全國(guó)職業(yè)的移動(dòng)應(yīng)用開(kāi)發(fā)賽項(xiàng)樣式開(kāi)發(fā)的開(kāi)源的新聞api,以及原生安卓接入案例代碼案例 源碼地址:keyxh/newsapi: python模仿2023年全國(guó)職業(yè)的移動(dòng)應(yīng)用開(kāi)發(fā)賽項(xiàng)樣式開(kāi)發(fā)的開(kāi)源的新聞api,以及安卓接入案例代碼 (github.com) 目錄 1.環(huán)境配置: (1).python環(huán)境pip install flaskp

    2024年02月11日
    瀏覽(27)
  • 手機(jī)移動(dòng)開(kāi)發(fā)技術(shù),,Android開(kāi)發(fā)經(jīng)典實(shí)戰(zhàn)

    手機(jī)移動(dòng)開(kāi)發(fā)技術(shù),,Android開(kāi)發(fā)經(jīng)典實(shí)戰(zhàn)

    面試題庫(kù) 按照系統(tǒng)分類(lèi) 按照大廠分類(lèi) 《2017-2020字節(jié)跳動(dòng)Android面試真題解析》 大神手寫(xiě)整理筆記類(lèi) 《Android框架體系架構(gòu)》 書(shū)籍類(lèi) 不需要太多,精就好! 《第一行代碼第二版》 技能提升資料庫(kù) 一共十個(gè)專(zhuān)題,包括了Android進(jìn)階所有學(xué)習(xí)資料,Android進(jìn)階視頻,F(xiàn)lutter,java基礎(chǔ)

    2024年04月13日
    瀏覽(19)
  • vue中內(nèi)置指令v-model的作用和常見(jiàn)使用方法介紹以及在自定義組件上支持

    vue中內(nèi)置指令v-model的作用和常見(jiàn)使用方法介紹以及在自定義組件上支持

    一、v-model是什么 v-model是Vue框架的一種內(nèi)置的API指令,本質(zhì)是一種語(yǔ)法糖寫(xiě)法,它負(fù)責(zé)監(jiān)聽(tīng)用戶的輸入事件以更新數(shù)據(jù),并對(duì)一些極端場(chǎng)景進(jìn)行一些特殊處理。在Vue中,v-model是用于在表單元素和組件之間創(chuàng)建雙向數(shù)據(jù)綁定的指令。它可以簡(jiǎn)化表單元素的綁定,使得在用戶輸入

    2024年01月19日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包