System.ArgumentOutOfRangeException: 索引和長(zhǎng)度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本申請(qǐng)涉及軟件,尤其是涉及一種二進(jìn)制文件的執(zhí)行方法、裝置及電子設(shè)備。
技術(shù)介紹
1、webassembly(縮寫為wasm)是一種基于堆棧的虛擬機(jī)的二進(jìn)制指令格式。它是一種低級(jí)的類匯編語言,具有緊湊的二進(jìn)制格式,可以接近原生的性能運(yùn)行,并為諸如c/c++等語言提供一個(gè)編譯目標(biāo)。
2、最初的wasm應(yīng)用是在計(jì)算機(jī)網(wǎng)頁上運(yùn)行的,現(xiàn)有的執(zhí)行流程中需要對(duì)傳遞參數(shù)的處理進(jìn)行兩次遍歷處理,由于計(jì)算機(jī)運(yùn)行速率比較高,在網(wǎng)頁中運(yùn)行時(shí)對(duì)運(yùn)行性能的影響基本可以忽略,但是如果將wasm應(yīng)用在資源受限的嵌入式設(shè)備上運(yùn)行,就會(huì)出現(xiàn)明顯的運(yùn)行性能差異,導(dǎo)致wasm應(yīng)用按照現(xiàn)有的執(zhí)行流程無法在嵌入式設(shè)備上運(yùn)行。
技術(shù)實(shí)現(xiàn)思路
1、本申請(qǐng)的目的在于提供一種二進(jìn)制文件的執(zhí)行方法、裝置及電子設(shè)備,可以應(yīng)用于資源有限的嵌入式設(shè)備中,提高應(yīng)用的運(yùn)行性能。
2、第一方面,本申請(qǐng)?zhí)峁┮环N二進(jìn)制文件的執(zhí)行方法,方法應(yīng)用于字節(jié)碼解釋器;方法包括:從二進(jìn)制文件中讀取當(dāng)前待執(zhí)行的字節(jié)碼指令;確定字節(jié)碼指令是方法調(diào)用指令時(shí),讀取字節(jié)碼指令對(duì)應(yīng)的擬被調(diào)用方法的第一索引,基于第一索引,確定擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例;若擬被調(diào)用方法為導(dǎo)入方法,則獲取擬被調(diào)用方法的簽名解析參數(shù),并壓入操作數(shù)棧;設(shè)置擬被調(diào)用方法對(duì)應(yīng)的第一棧幀結(jié)構(gòu),調(diào)用native方法并將native方法的返回值寫入棧幀,恢復(fù)調(diào)用函數(shù)實(shí)例;其中,native方法中,參數(shù)類型檢查與參數(shù)傳遞同步進(jìn)行;若擬被調(diào)用方法不是導(dǎo)入方法,則將擬被調(diào)用方法的方法參數(shù)壓入
3、進(jìn)一步地,上述基于第一索引,確定擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例的步驟,包括:獲取當(dāng)前被調(diào)用方法對(duì)應(yīng)的第二索引;判斷第二索引與第一索引是否一致;如果是,將當(dāng)前被調(diào)用方法對(duì)應(yīng)的方法實(shí)例作為擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例;如果否,根據(jù)第二索引在下載文件中獲取對(duì)應(yīng)的實(shí)例數(shù)據(jù),基于實(shí)例數(shù)據(jù)重新構(gòu)建擬被調(diào)用方法需要的方法實(shí)例。
4、進(jìn)一步地,上述方法還包括:判斷擬被調(diào)用方法是否為導(dǎo)入方法,具體包括:獲取導(dǎo)入方法的數(shù)量,并判斷第一索引是否小于導(dǎo)入方法的數(shù)量;如果是,確定擬被調(diào)用方法是導(dǎo)入方法;如果否,確定擬被調(diào)用方法不是導(dǎo)入方法。
5、進(jìn)一步地,上述獲取擬被調(diào)用方法的簽名解析參數(shù),并壓入操作數(shù)棧的步驟,包括:獲取擬被調(diào)用方法對(duì)應(yīng)的函數(shù)簽名;根據(jù)函數(shù)簽名中的字符串,將指定字符對(duì)應(yīng)的參數(shù)進(jìn)行地址轉(zhuǎn)換計(jì)算,將計(jì)算后的值作為要傳遞的參數(shù)放入操作數(shù)棧中的指定位置。
6、進(jìn)一步地,上述設(shè)置擬被調(diào)用方法對(duì)應(yīng)的第一棧幀結(jié)構(gòu),調(diào)用native方法并將native方法的返回值寫入棧幀,恢復(fù)調(diào)用函數(shù)實(shí)例的步驟,包括:設(shè)置當(dāng)前棧幀指針指向擬被調(diào)用方法對(duì)應(yīng)的第一棧幀結(jié)構(gòu);根據(jù)第一棧幀結(jié)構(gòu)中的方法索引,從native方法表中獲取第一棧幀結(jié)構(gòu)中的方法索引對(duì)應(yīng)的native方法,并執(zhí)行native方法;在native方法執(zhí)行結(jié)束后,根據(jù)第一棧幀結(jié)構(gòu)中的返回值的個(gè)數(shù)和位置信息,將native方法的返回值存放至操作數(shù)棧的指定位置;將當(dāng)前棧幀指針指向調(diào)用native方法前的棧幀結(jié)構(gòu)。
7、進(jìn)一步地,上述從native方法表中獲取第一棧幀結(jié)構(gòu)中的方法索引對(duì)應(yīng)的native方法,并執(zhí)行native方法的步驟,包括:獲取擬被調(diào)用方法要調(diào)用的新方法,根據(jù)計(jì)算得出新方法需要使用的棧大小并分配??臻g,為新方法設(shè)置第三棧幀結(jié)構(gòu);調(diào)用新方法,當(dāng)新方法執(zhí)行完畢時(shí),基于返回值更新第三棧幀結(jié)構(gòu);根據(jù)從第三棧幀結(jié)構(gòu)中獲取的返回值的偏移,將返回值拷貝至擬被調(diào)用方法的第一棧幀結(jié)構(gòu);釋放第三棧幀結(jié)構(gòu)。
8、進(jìn)一步地,上述第一棧幀結(jié)構(gòu)包括:前一個(gè)調(diào)用方法的幀地址、當(dāng)前方法的索引、當(dāng)前方法返回值在操作數(shù)棧中的偏移、當(dāng)前方法字節(jié)碼地址、局部變量棧地址、操作數(shù)棧的地址。
9、第二方面,本申請(qǐng)還提供一種二進(jìn)制文件的執(zhí)行裝置,裝置應(yīng)用于字節(jié)碼解釋器;裝置包括:指令獲取模塊,用于從二進(jìn)制文件中讀取當(dāng)前待執(zhí)行的字節(jié)碼指令;實(shí)例確定模塊,用于確定字節(jié)碼指令是方法調(diào)用指令時(shí),讀取字節(jié)碼指令對(duì)應(yīng)的擬被調(diào)用方法的第一索引,基于第一索引,確定擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例;第一執(zhí)行模塊,用于若擬被調(diào)用方法是導(dǎo)入方法,則獲取擬被調(diào)用方法的簽名解析參數(shù),并壓入操作數(shù)棧;設(shè)置擬被調(diào)用方法對(duì)應(yīng)的第一棧幀結(jié)構(gòu),調(diào)用native方法并將native方法的返回值寫入棧幀,恢復(fù)調(diào)用函數(shù)實(shí)例;其中,native方法中,參數(shù)類型檢查與參數(shù)傳遞同步進(jìn)行;第二執(zhí)行模塊,用于若擬被調(diào)用方法不是導(dǎo)入方法,則將擬被調(diào)用方法的方法參數(shù)壓入操作數(shù)棧;分配??臻g,設(shè)置擬被調(diào)用方法對(duì)應(yīng)的第二棧幀結(jié)構(gòu),獲取調(diào)用方法,以執(zhí)行擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例。
10、第三方面,本申請(qǐng)還提供一種電子設(shè)備,包括處理器和存儲(chǔ)器,存儲(chǔ)器存儲(chǔ)有能夠被處理器執(zhí)行的計(jì)算機(jī)可執(zhí)行指令,處理器執(zhí)行計(jì)算機(jī)可執(zhí)行指令以實(shí)現(xiàn)上述第一方面所述的方法。
11、第四方面,本申請(qǐng)還提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,計(jì)算機(jī)可執(zhí)行指令在被處理器調(diào)用和執(zhí)行時(shí),計(jì)算機(jī)可執(zhí)行指令促使處理器實(shí)現(xiàn)上述第一方面所述的方法。
12、本申請(qǐng)?zhí)峁┑囊环N二進(jìn)制文件的執(zhí)行方法、裝置及電子設(shè)備中,方法應(yīng)用于字節(jié)碼解釋器;方法包括:從二進(jìn)制文件中讀取當(dāng)前待執(zhí)行的字節(jié)碼指令;確定字節(jié)碼指令是方法調(diào)用指令時(shí),讀取字節(jié)碼指令對(duì)應(yīng)的擬被調(diào)用方法的第一索引,基于第一索引,確定擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例;若擬被調(diào)用方法是導(dǎo)入方法,則獲取擬被調(diào)用方法的簽名解析參數(shù),并壓入操作數(shù)棧;設(shè)置擬被調(diào)用方法對(duì)應(yīng)的第一棧幀結(jié)構(gòu),調(diào)用native方法并將native方法的返回值寫入棧幀,恢復(fù)調(diào)用函數(shù)實(shí)例;其中,native方法中,參數(shù)類型檢查與參數(shù)傳遞同步進(jìn)行;若擬被調(diào)用方法不是導(dǎo)入方法,則將擬被調(diào)用方法的方法參數(shù)壓入操作數(shù)棧;分配??臻g,設(shè)置擬被調(diào)用方法對(duì)應(yīng)的第二棧幀結(jié)構(gòu),獲取調(diào)用方法,以執(zhí)行擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例。該執(zhí)行方法中,native方法中,參數(shù)類型檢查與參數(shù)傳遞同步進(jìn)行,可減少處理過程及空間消耗,可以應(yīng)用于資源有限的嵌入式設(shè)備中,提高應(yīng)用的運(yùn)行性能和效率。
本文檔來自技高網(wǎng)...【技術(shù)保護(hù)點(diǎn)】
1.一種二進(jìn)制文件的執(zhí)行方法,其特征在于,所述方法應(yīng)用于字節(jié)碼解釋器;所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,基于所述第一索引,確定所述擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例的步驟,包括:
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括:判斷所述擬被調(diào)用方法是否為導(dǎo)入方法;
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,獲取所述擬被調(diào)用方法的簽名解析參數(shù),并壓入操作數(shù)棧的步驟,包括:
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,設(shè)置所述擬被調(diào)用方法對(duì)應(yīng)的第一棧幀結(jié)構(gòu),調(diào)用native方法并將native方法的返回值寫入棧幀,恢復(fù)調(diào)用函數(shù)實(shí)例的步驟,包括:
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,從native方法表中獲取所述第一棧幀結(jié)構(gòu)中的方法索引對(duì)應(yīng)的native方法,并執(zhí)行所述native方法的步驟,包括:
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一棧幀結(jié)構(gòu)包括:前一個(gè)調(diào)用方法的幀地址、當(dāng)前方法的索引、當(dāng)前方法返回值在操作數(shù)棧中的偏移、當(dāng)前方法字節(jié)碼地址、局部變量棧地址、操作數(shù)棧的地址
8.一種二進(jìn)制文件的執(zhí)行裝置,其特征在于,所述裝置應(yīng)用于字節(jié)碼解釋器;所述裝置包括:
9.一種電子設(shè)備,其特征在于,包括處理器和存儲(chǔ)器,所述存儲(chǔ)器存儲(chǔ)有能夠被所述處理器執(zhí)行的計(jì)算機(jī)可執(zhí)行指令,所述處理器執(zhí)行所述計(jì)算機(jī)可執(zhí)行指令以實(shí)現(xiàn)權(quán)利要求1至7任一項(xiàng)所述的方法。
10.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令在被處理器調(diào)用和執(zhí)行時(shí),計(jì)算機(jī)可執(zhí)行指令促使處理器實(shí)現(xiàn)權(quán)利要求1至7任一項(xiàng)所述的方法。
...【技術(shù)特征摘要】
1.一種二進(jìn)制文件的執(zhí)行方法,其特征在于,所述方法應(yīng)用于字節(jié)碼解釋器;所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,基于所述第一索引,確定所述擬被調(diào)用方法對(duì)應(yīng)的方法實(shí)例的步驟,包括:
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括:判斷所述擬被調(diào)用方法是否為導(dǎo)入方法;
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,獲取所述擬被調(diào)用方法的簽名解析參數(shù),并壓入操作數(shù)棧的步驟,包括:
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,設(shè)置所述擬被調(diào)用方法對(duì)應(yīng)的第一棧幀結(jié)構(gòu),調(diào)用native方法并將native方法的返回值寫入棧幀,恢復(fù)調(diào)用函數(shù)實(shí)例的步驟,包括:
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,從native方法表中獲取所述第一棧幀結(jié)構(gòu)中的方法索引對(duì)應(yīng)的native方...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:李寧,王書禮,楊旭昊,文懷濤,曹海濤,劉璇,
申請(qǐng)(專利權(quán))人:楚天龍股份有限公司,
類型:發(fā)明
國(guó)別省市:
還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。