chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

反編譯后代碼分析1

jf_78858299 ? 來(lái)源:北洋洋洋 ? 作者:北洋洋洋 ? 2023-02-14 15:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

@

  • 反編譯后代碼分析

關(guān)于協(xié)程的一些理解

?協(xié)程掛起讓異步代碼可以像同步代碼一樣調(diào)用,但其本質(zhì)還是同步,即協(xié)程體中的代碼其實(shí)是同步。

?

?因?yàn)閰f(xié)程也只是對(duì)線(xiàn)程池的封裝,所以需要了解些線(xiàn)程的一些知識(shí)。線(xiàn)程本身已經(jīng)有的協(xié)程也會(huì)有,但是協(xié)程有的線(xiàn)程不一定有

?

?編譯器會(huì)為每一個(gè)掛起函數(shù)生成一個(gè)匿名內(nèi)部類(lèi),其繼承SuspendLabmba類(lèi)重寫(xiě)其invokeSuspend方法,這個(gè)方法里面即為協(xié)程體的代碼【大致內(nèi)容請(qǐng)先了解】

?

?編譯器會(huì)對(duì)協(xié)程體中的掛起函數(shù)和普通函數(shù)進(jìn)行切割,切割時(shí)進(jìn)行l(wèi)abel的自增來(lái)保證之后代碼的執(zhí)行順序,即協(xié)程保證運(yùn)行順序的本質(zhì)?!緦?duì)比線(xiàn)程:進(jìn)行PC程序計(jì)數(shù)器的控制來(lái)恢復(fù)執(zhí)行】

?

?協(xié)程體中會(huì)添加一個(gè)label字段,標(biāo)識(shí)接下來(lái)該運(yùn)行協(xié)程體中的哪行代碼【即協(xié)程如何知道自己執(zhí)行到哪步是用這個(gè)label完成的】(對(duì)比線(xiàn)程:線(xiàn)程存儲(chǔ)下一個(gè)代碼指令是用PC計(jì)數(shù)器來(lái)做的)

?

?協(xié)程體中的數(shù)據(jù),看過(guò)之前那篇文章的人應(yīng)該大致了解掛起函數(shù)其實(shí)就是匿名內(nèi)部類(lèi),數(shù)據(jù)是保存在棧幀中的,(對(duì)比線(xiàn)程:也是通過(guò)棧幀中的局部變量表和操作數(shù)棧來(lái)存儲(chǔ)數(shù)據(jù))

?

?協(xié)程體中碰到掛起函數(shù)會(huì)直接返回,等待掛起函數(shù)通知

?

?當(dāng)我們調(diào)用掛起函數(shù)時(shí)都會(huì)傳入一個(gè)Continuation,掛起函數(shù)執(zhí)行完正常退出或者拋異常退出這個(gè)時(shí)候外面的協(xié)程需要知道這個(gè)信息,怎么通知呢?通過(guò)Continuation的resumewith方法,這個(gè)方法會(huì)再次調(diào)用invokeSuspend取出label來(lái)保證之后執(zhí)行代碼的順序,即協(xié)程自動(dòng)恢復(fù)運(yùn)行的本質(zhì)

?

?(對(duì)比線(xiàn)程:方法正常執(zhí)行完成之后有兩種情況1、正常結(jié)束,2.異常退出。其里面的PC計(jì)數(shù)器保證之后執(zhí)行的代碼順序,也就是說(shuō)協(xié)程在原本線(xiàn)程之上又加了一層控制)

?

?協(xié)程體中可以在開(kāi)啟一個(gè)協(xié)程,也就是協(xié)程具有父子關(guān)系的本質(zhì)。在協(xié)程伊始的時(shí)候會(huì)默認(rèn)給一些默認(rèn)數(shù)據(jù)(包括協(xié)程體運(yùn)行在哪個(gè)線(xiàn)程即調(diào)度器其通過(guò)攔截器實(shí)現(xiàn),執(zhí)行狀態(tài)檢測(cè)用到的Job,攔截器等等)這些數(shù)據(jù)保存在協(xié)程的上下文中,

?

?當(dāng)在協(xié)程體中又開(kāi)啟了一個(gè)協(xié)程時(shí),其會(huì)獲取父協(xié)程的上下文進(jìn)行和自己的合并作為自己的上下文。

【簡(jiǎn)而言之,和協(xié)程本身有關(guān)的數(shù)據(jù)保存在上下文中,和業(yè)務(wù)有關(guān)的代碼會(huì)放在匿名內(nèi)部類(lèi)中?!?/p>

?

基礎(chǔ)框架層源碼分析

val createCoroutine = suspend {
                //掛起函數(shù)代碼

            }.createCoroutine(object : Continuation<Unit> {
                override val context: CoroutineContext
                    get() = TODO("Not yet implemented")

                override fun resumeWith(result: Result<Unit>) {
     //可從result中獲取返回值或異常
                }
            })

   createCoroutine.resume(Unit)

?1.編譯器會(huì)對(duì)掛起函數(shù)做處理,讓他繼承SuspendCorunting,重寫(xiě)其invokeSuspend方法,方法體為掛起函數(shù)中的代碼 2.當(dāng)手動(dòng)調(diào)用createCoroutine返回值的resume方法的時(shí)候,會(huì)調(diào)用到resumeWith函數(shù),其里面會(huì)調(diào)用invokeSuspend也就是掛起函數(shù)體里面的代碼,之后兩種情況:3.碰到普通函數(shù)直接執(zhí)行;碰到掛起函數(shù)傳入Continuation并直接返回一個(gè)標(biāo)識(shí)代表其為掛起函數(shù),這個(gè)時(shí)候協(xié)程直接退出,之后掛起函數(shù)執(zhí)行完調(diào)用Continuation的resumeWith繼續(xù)執(zhí)行方法體代碼【通過(guò)label確定順序】 4.在invokeSuepend中可以通過(guò)result獲取掛起函數(shù)執(zhí)行的結(jié)果:異?;蛘叻祷刂?。進(jìn)行對(duì)應(yīng)處理。

?

實(shí)戰(zhàn)分析

class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        GlobalScope.launch {
            println("掛起點(diǎn)1開(kāi)始")
            delay(1000)         //掛起點(diǎn)1
            println("掛起點(diǎn)1結(jié)束")
            hello()             //掛起點(diǎn)2
            println("掛起點(diǎn)2結(jié)束")
            delay(1000)         //掛起點(diǎn)3
            println("掛起點(diǎn)3結(jié)束")
            word()              //掛起點(diǎn)4
        }
    }
    //掛起函數(shù),編譯器默認(rèn)傳入Continuation
    suspend fun hello(){
        //再次掛起
        withContext(Dispatchers.IO){
            delay(1000)
            println("hello")
        }
    }
    
    suspend fun word(){
        withContext(Dispatchers.IO){
            delay(1000)
            println("word")
        }
    }
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    8651

    瀏覽量

    145394
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4899

    瀏覽量

    70658
  • 線(xiàn)程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20199
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一種用于反編譯代碼與源代碼的比較算法

    現(xiàn)有反編譯器產(chǎn)生的代碼與對(duì)應(yīng)的源代碼之間存在差異,找到并理解差異有助于改進(jìn)并完善反編譯器的設(shè)計(jì)。該文給出一種適用于C 語(yǔ)言反編譯
    發(fā)表于 03-21 15:08 ?10次下載

    8051系列單片機(jī)反編譯軟件(工具)

    8051系列單片機(jī)反編譯軟件(工具):最好的8051系列單片機(jī)反編譯軟件(window版)
    發(fā)表于 10-12 10:58 ?275次下載
    8051系列單片機(jī)<b class='flag-5'>反編譯</b>軟件(工具)

    8051系列單片機(jī)反編譯軟件(dos版)

    8051系列單片機(jī)反編譯軟件(dos版):
    發(fā)表于 10-12 11:01 ?0次下載
    8051系列單片機(jī)<b class='flag-5'>反編譯</b>軟件(dos版)

    反編譯代碼與源代碼的比較算法

    反編譯代碼與源代碼
    發(fā)表于 02-09 15:19 ?10次下載

    C32asm國(guó)產(chǎn)靜態(tài)反編譯工具源代碼

    C32asm國(guó)產(chǎn)靜態(tài)反編譯工具源代碼 [GLOBENOTE]LanguageChange=必須重新打開(kāi)應(yīng)用程序才能生效Done=完成OpenFileErr=打開(kāi) %s 文件遭遇錯(cuò)誤 [GENERAL]ButtonOk=確定
    發(fā)表于 02-24 14:12 ?49次下載

    FoxPro編程愛(ài)好者的反編譯工具源代碼

    FoxPro編程愛(ài)好者的反編譯工具源代碼 UNFOXALL 2.1獻(xiàn)給廣大FoxPro編程愛(ài)好者的反編譯工具          &nb
    發(fā)表于 02-26 16:13 ?94次下載

    8051系列單片機(jī)反編譯軟件.rar

    8051系列單片機(jī)反編譯軟件
    發(fā)表于 04-13 15:24 ?66次下載

    Android反編譯工具

    Android反編譯工具
    發(fā)表于 12-17 15:59 ?21次下載

    8051 MCU反編譯開(kāi)發(fā)方法記錄[

    8051 MCU反編譯開(kāi)發(fā)方法記錄1、項(xiàng)目背景2、開(kāi)發(fā)環(huán)境3、開(kāi)發(fā)步驟3.1 反編譯3.2 找出EEPROM的寫(xiě)入地址3.3 找出EEPROM讀寫(xiě)操作的代碼段3.4 找出EEPROM讀
    發(fā)表于 11-29 17:51 ?11次下載
    8051 MCU<b class='flag-5'>反編譯</b>開(kāi)發(fā)方法記錄[

    java反編譯常用的保護(hù)技術(shù)

    由于Java字節(jié)碼的抽象級(jí)別較高,因此它們較容易被反編譯。本節(jié)介紹了幾種常用的方法,用于保護(hù)Java字節(jié)碼不被反編譯。通常,這些方法不能夠絕對(duì)防止程序被反編譯,而是加大反編譯的難度而已
    發(fā)表于 07-29 16:00 ?812次閱讀

    反編譯后代碼分析2

    編譯器會(huì)為每一個(gè)掛起函數(shù)生成一個(gè)匿名內(nèi)部類(lèi),其繼承SuspendLabmba類(lèi)重寫(xiě)其invokeSuspend方法,這個(gè)方法里面即為協(xié)程體的代碼【大致內(nèi)容請(qǐng)先了解】
    的頭像 發(fā)表于 02-14 15:27 ?660次閱讀

    SpringBoot項(xiàng)目Jar包加密防止反編譯方案

    最近項(xiàng)目要求部署到其他公司的服務(wù)器上,但是又不想將源碼泄露出去。要求對(duì)正式環(huán)境的啟動(dòng)包進(jìn)行安全性處理,防止客戶(hù)直接通過(guò)反編譯工具將代碼反編譯出來(lái)。
    的頭像 發(fā)表于 12-12 14:04 ?1699次閱讀
    SpringBoot項(xiàng)目Jar包加密防止<b class='flag-5'>反編譯</b>方案

    ida反編譯出來(lái)代碼能直接用嗎

    IDA反編譯出來(lái)的代碼通常 不能直接使用 ,這主要基于以下幾個(gè)方面的原因: 一、代碼的不完整性 IDA反編譯生成的代碼可能缺少原始源
    的頭像 發(fā)表于 09-02 10:55 ?1434次閱讀

    java反編譯代碼可以修改么

    的影響。 1. Java反編譯工具 在Java反編譯領(lǐng)域,有一些知名的工具可以幫助開(kāi)發(fā)者將字節(jié)碼轉(zhuǎn)換回源代碼。這些工具包括: JD-GUI :一個(gè)圖形界面的
    的頭像 發(fā)表于 09-02 11:00 ?1264次閱讀

    java反編譯能拿到源碼嗎

    在語(yǔ)法和風(fēng)格上有所不同的代碼,因?yàn)樗鼈冎饕P(guān)注于恢復(fù)代碼的邏輯結(jié)構(gòu),而不是精確復(fù)制原始代碼的每個(gè)細(xì)節(jié)。 1. 反編譯的基本原理 Java程序
    的頭像 發(fā)表于 09-02 11:03 ?1780次閱讀