国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

融合知識(shí)的小片段代碼相似性比較模型

2023-09-13 03:07龐建民
關(guān)鍵詞:基本塊跨平臺(tái)二進(jìn)制

夏 冰,周 鑫,龐建民+,岳 峰,單 征,3

(1.信息工程大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院,河南 鄭州 450001;2.中原工學(xué)院 前沿信息技術(shù)研究院,河南 鄭州 450007;3.信息工程大學(xué) 嵩山實(shí)驗(yàn)室,河南 鄭州 450007)

0 引 言

二進(jìn)制代碼相似性比較技術(shù)廣泛應(yīng)用于無源代碼軟件安全分析中[1],如bug搜索、惡意軟件分析檢測(cè)、補(bǔ)丁生成分析和軟件竊取檢測(cè)等方面。以O(shè)penSSL(open secure sockets layer)統(tǒng)計(jì)分析為例,二進(jìn)制代碼中小于5條指令的基本塊數(shù)量占比53%,不超過5個(gè)基本塊組成的二進(jìn)制函數(shù)占比70.69%。這些較少基本塊組成的小片段代碼,由于攜帶指令序列較短,控制流程圖簡(jiǎn)單,有限的語(yǔ)義信息使得當(dāng)前二進(jìn)制代碼相似性比較方案準(zhǔn)確性差,因此如何提升小片段代碼相似性比較準(zhǔn)確率對(duì)軟件安全分析具有重要意義。

軟件是人類在工作中用特定語(yǔ)言創(chuàng)造出來的,是人類知識(shí)得以延續(xù)的新載體。軟件知識(shí)并不隨軟件編譯優(yōu)化和跨平臺(tái)的改變而改變,因此知識(shí)的穩(wěn)定性、可重復(fù)性和可預(yù)測(cè)性[2]能準(zhǔn)確反映代碼間相似性比較結(jié)果?;谠撍枷?,在二進(jìn)制代碼知識(shí)分析基礎(chǔ)之上,融合代碼中的函數(shù)嵌入和知識(shí)嵌入,提出一種二進(jìn)制小片段代碼相似性比較模型BSM(binary snippet code similarity model)。

本文貢獻(xiàn)如下:①提出一種二進(jìn)制函數(shù)代碼知識(shí)學(xué)習(xí)方法。方法將切分后的函數(shù)代碼知識(shí)看作單詞,基本塊序列上攜帶的知識(shí)序列看作句子,送入序列神經(jīng)網(wǎng)絡(luò)得到知識(shí)嵌入;②提出一種融合知識(shí)嵌入和函數(shù)嵌入的二進(jìn)制代碼小片段相似性比較模型。實(shí)驗(yàn)結(jié)果表明,相較于當(dāng)前最優(yōu)的函數(shù)嵌入方案,模型可顯著提升二進(jìn)制小片段代碼相似性比較結(jié)果,驗(yàn)證集上準(zhǔn)確率達(dá)到98.37%。

1 相關(guān)工作

1.1 二進(jìn)制代碼

二進(jìn)制代碼是指源代碼經(jīng)過編譯鏈接后,可被CPU直接執(zhí)行的機(jī)器代碼。編譯生成的二進(jìn)制目標(biāo)文件通常由多個(gè)二進(jìn)制函數(shù)組成并按照線性地址LA(linear address)存儲(chǔ)。一段線性地址范圍可表示一個(gè)二進(jìn)制函數(shù)F(binary function),如圖1“Add”函數(shù)LA范圍為0x00401410-0x004014C4。LA范圍內(nèi)的機(jī)器代碼稱之為二進(jìn)制片段代碼。為討論方便,本文將二進(jìn)制函數(shù)F等價(jià)于二進(jìn)制片段代碼。二進(jìn)制函數(shù)F由至少一個(gè)基本塊BB(basic block)組成并在控制流圖CFG(control flow graph)作用下表達(dá)函數(shù)功能。CFG可用一個(gè)二元組(N,E)描述,其中N是有窮節(jié)點(diǎn)集合,每個(gè)節(jié)點(diǎn)表示函數(shù)內(nèi)一個(gè)基本塊BB;E是邊集合,表示基本塊之間的“True-False”調(diào)用連接關(guān)系。二進(jìn)制函數(shù)既可用線性地址LA上的指令序列表示,也可以用CFG表示,兩種表示是等價(jià)的。以“Add”函數(shù)為例,圖右上半部是函數(shù)線性地址的指令序列表示,圖右下半部是函數(shù)流程圖CFG表示。二進(jìn)制代碼的線性地址序列表示和流程圖表示如圖1所示。

圖1 二進(jìn)制代碼的線性地址序列表示和流程圖表示

本文將由較少數(shù)量基本塊組成的二進(jìn)制函數(shù)稱之為小片段代碼S(snippet code)。小片段代碼S在二進(jìn)制軟件中占比較高,以O(shè)penSSL和Linux操作系統(tǒng)內(nèi)核為例,基本塊數(shù)量范圍在[1,3]的函數(shù)數(shù)量分別占比二進(jìn)制函數(shù)總量的56.60%和54.55%?;緣K數(shù)量范圍在[1,5]的二進(jìn)制函數(shù)占比更高,分別高達(dá)67.84%和70.69%?;緣K占比見表1。

表1 基本塊占比/%

1.2 二進(jìn)制代碼相似性比較

隨著自然語(yǔ)言處理和深度學(xué)習(xí)的興起,二進(jìn)制代碼天然的線性地址布局為基于序列分析方案提供優(yōu)勢(shì),將線性地址上的指令序列喂入序列神經(jīng)網(wǎng)絡(luò)模型得到函數(shù)嵌入向量,二進(jìn)制代碼相似性計(jì)算就轉(zhuǎn)換為向量間比較。文獻(xiàn)[3]提出的αDiff方案對(duì)函數(shù)上的原始字節(jié)序列進(jìn)行編碼生成函數(shù)嵌入;文獻(xiàn)[4]提出的ZEEK方案將二進(jìn)制函數(shù)中的每個(gè)基本塊分割成多個(gè)串(strand)并向量化,利用全連接網(wǎng)絡(luò)判定兩個(gè)函數(shù)是否屬于同一類。文獻(xiàn)[5]在匯編指令級(jí)上捕獲連續(xù)基本塊內(nèi)的程序行為集合并編碼為向量,采用基于樹的機(jī)器學(xué)習(xí)模型來預(yù)測(cè)兩個(gè)函數(shù)相似概率值。文獻(xiàn)[6]把指令看作單詞,基本塊看作句子,利用循環(huán)神經(jīng)網(wǎng)絡(luò)RNN(recurrent neural network)實(shí)現(xiàn)基本塊間相似性比較。文獻(xiàn)[7]類似文獻(xiàn)[6]的思路,通過機(jī)器翻譯NMT(neural machine translation)技術(shù)實(shí)現(xiàn)基本塊間相似性比較。SAFE(self-attentive function embedding)方案[8]將函數(shù)指令序列喂入雙向循環(huán)神經(jīng)網(wǎng)絡(luò)BRNN(bi-directional recurrent neural network)得到函數(shù)嵌入。文獻(xiàn)[9]將組成指令的操作碼和操作數(shù)看作詞,基本塊看作句子,基本塊間隨機(jī)游走路徑看作段落,加權(quán)不同路徑生成函數(shù)嵌入。

二進(jìn)制代碼用CFG表示后,代碼相似性計(jì)算問題就轉(zhuǎn)換為圖相似性比較問題。Gemini[10]提出屬性控制流圖,采用人工方式抽取基本塊特征,利用structure2vec技術(shù)生成函數(shù)嵌入,但方案不考慮少于10個(gè)基本塊的函數(shù);I2V(instruction 2 vector)[11]采用無監(jiān)督方式生成基本塊嵌入,利用structure2vec技術(shù)生成函數(shù)嵌入,但方案將函數(shù)基本塊數(shù)量設(shè)置為150;文獻(xiàn)[12]提出指令依賴關(guān)系圖。文獻(xiàn)[13]融入語(yǔ)義感知、結(jié)構(gòu)感知、順序感知等信息,使用BERT[14](bidirectional encoder representations from transformers)模型生成函數(shù)嵌入。

以上方案在基本塊較多的代碼上具有較高相似性結(jié)果,但是在小片段代碼比較上卻具有較低準(zhǔn)確率[1,15]。由于小片段代碼指令序列較短,深度學(xué)習(xí)的不可解釋特性使得兩個(gè)不相似的小片段函數(shù)產(chǎn)生高度相似結(jié)果。同時(shí),圖節(jié)點(diǎn)數(shù)量較少,節(jié)點(diǎn)間調(diào)用邏輯簡(jiǎn)單,節(jié)點(diǎn)屬性可利用較少,再加上同一份源代碼可編譯到不同平臺(tái)上,因此需要引入穩(wěn)定的外部信息,增強(qiáng)并提升跨平臺(tái)代碼相似性比較的準(zhǔn)確性。

2 問題定義和函數(shù)知識(shí)學(xué)習(xí)

本章主要給出二進(jìn)制代碼相似性定義,提出一種二進(jìn)制函數(shù)知識(shí)學(xué)習(xí)方法。

2.1 二進(jìn)制代碼片段相似性

兩個(gè)二進(jìn)制函數(shù)F1和F2相似是指相同的源代碼s編譯生成的結(jié)果F1s和F2s是相似的,記作F1≈F2。 二進(jìn)制代碼相似性挑戰(zhàn)在于編譯轉(zhuǎn)換過程的多樣性。轉(zhuǎn)換過程可利用不同的編譯器c如gcc、clang,可攜帶不同的編譯選項(xiàng)-O[0,1,2,3],可生成不同平臺(tái)(如X86、ARM)的二進(jìn)制函數(shù)。

在指令、基本塊的表示學(xué)習(xí)實(shí)現(xiàn)上,可通過word2vec等詞向量生成模型將指令用向量表示;基于指令學(xué)習(xí)表示,將基本塊內(nèi)的指令序列喂入RNN等序列學(xué)習(xí)模型后可得到基本塊嵌入。一旦得到指令嵌入或基本塊嵌入,函數(shù)可借助序列學(xué)習(xí)或者圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)生成最終函數(shù)嵌入。

2.2 函數(shù)知識(shí)學(xué)習(xí)

知識(shí)在軟件體上無處不在,通過開源或者版本更新等方式傳承下來。有經(jīng)驗(yàn)的軟件開發(fā)者,為了調(diào)試和調(diào)用方便,通常給函數(shù)取一個(gè)代表其功能含義的名字如SendData、Sort,并在函數(shù)內(nèi)調(diào)用應(yīng)用程序接口API(application programming interface)或者其它已實(shí)現(xiàn)的函數(shù)來加速實(shí)現(xiàn)軟件功能。這些函數(shù)名和API名,是軟件開發(fā)者將人類工作經(jīng)驗(yàn)通過語(yǔ)言賦能在軟件體上,清晰地表達(dá)了函數(shù)的高級(jí)語(yǔ)義功能。為描述方便,本文將函數(shù)名和API名統(tǒng)稱為函數(shù)名,將軟件開發(fā)者工作經(jīng)驗(yàn)稱之為函數(shù)代碼知識(shí)。

為保持函數(shù)命名風(fēng)格一致,編譯器會(huì)對(duì)函數(shù)名進(jìn)行特殊處理,如名為“_ZNSt22condition_variable_anyD2Ev”的函數(shù),其中字符串_ZNSt22、D2Ev是編譯器在編譯過程中增加的內(nèi)容。對(duì)于這些函數(shù)名,需借助第三方工具如cxxfilt、undname等,使其恢復(fù)為“condition_variable_any”。有經(jīng)驗(yàn)的軟件開發(fā)者通常采用兩種函數(shù)名命名風(fēng)格。一種是首字母小寫,后面單詞首字母大寫,這種命名風(fēng)格稱之為camelCase駱駝拼寫法(如setFlagWithResult)。一種是通過“_”分隔符將每個(gè)單詞拼接在一起,這種命名風(fēng)格稱之為SnakeCase蛇形命名法(如Set_Flag_With_Result,即用下劃線將單詞連接起來)。函數(shù)名稱越長(zhǎng),攜帶的知識(shí)越多。

函數(shù)名稱太長(zhǎng)不利于構(gòu)建知識(shí)字典,因此需要進(jìn)行知識(shí)切分。假定較長(zhǎng)函數(shù)知識(shí)主要通過兩種不同的命名風(fēng)格進(jìn)行描述,分析其規(guī)律可使其長(zhǎng)名字切分成多個(gè)token。如二進(jìn)制函數(shù)內(nèi)部調(diào)用了函數(shù)“Set_Flag_With_Result”和API“SetSockOpt”,該函數(shù)代碼知識(shí)切分后則有“set flag with result set sock opt ”7個(gè)token組成。這樣,通過少數(shù)常用token的組合可表達(dá)多個(gè)函數(shù)知識(shí),如“set”出現(xiàn)在上述函數(shù)名和API名中。切分不僅能保持命名的不變性,又有助于構(gòu)建知識(shí)字典防止OOV(out of vocabulary)問題出現(xiàn)。將函數(shù)代碼知識(shí)切分生成的token序列看作一行句子,借助word2vec詞向量生成模型,可將各個(gè)token知識(shí)轉(zhuǎn)換成向量表示。

這樣,函數(shù)知識(shí)學(xué)習(xí)算法流程描述如下:首先提取CFG上簡(jiǎn)單路徑,路徑上的每個(gè)點(diǎn)代表基本塊;接著提取基本塊包含的函數(shù)代碼知識(shí)(如API序列、引用函數(shù)名);隨后將一條簡(jiǎn)單路徑上所有函數(shù)代碼知識(shí)進(jìn)行切分形成一個(gè)序列;最后,將序列看作句子,喂入詞向量生成模型得到知識(shí)學(xué)習(xí)表示結(jié)果。具體實(shí)現(xiàn)見3.4節(jié)。

采用簡(jiǎn)單路徑提取、切分和學(xué)習(xí)函數(shù)知識(shí),有下列好處:一是token序列形成的句子可反映某一執(zhí)行時(shí)刻函數(shù)的動(dòng)態(tài)特性;二是遍歷得到的所有執(zhí)行路徑可以充分表達(dá)函數(shù)功能的全面性;三是每個(gè)token都能夠?qū)W習(xí)到函數(shù)知識(shí)序列的前后上下文語(yǔ)義,保持其命名的完整性。第4章實(shí)驗(yàn)與結(jié)果分析表明,二進(jìn)制代碼融合知識(shí)學(xué)習(xí)表示后,可顯著提升代碼相似性比較的準(zhǔn)確性。

3 實(shí)現(xiàn)和訓(xùn)練

3.1 整體方案

BSM模型整體方案由函數(shù)嵌入和知識(shí)嵌入兩部分組成。BSM模型結(jié)構(gòu)如圖2所示。

圖2 BSM模型結(jié)構(gòu)

圖3 孿生網(wǎng)絡(luò)架構(gòu)

3.2 數(shù)據(jù)集

類似Gemini、SAFE和I2V方案,本文采用OpenSSL作為基礎(chǔ)數(shù)據(jù)集。選擇OpenSSL1.1兩個(gè)版本(f、m)的源代碼,采用gcc編譯器并攜帶不同的編譯選項(xiàng)-O[0,1,2,3],分別編譯到X86平臺(tái)、ARM平臺(tái)上;接著利用Radare2逆向分析工具分別提取函數(shù)基本塊和函數(shù)代碼知識(shí),將來自相同源代碼的兩個(gè)二進(jìn)制函數(shù)定義為相似并標(biāo)記為+1,形成一對(duì)函數(shù)。為保持?jǐn)?shù)據(jù)集平衡,通過隨機(jī)方式構(gòu)建相同數(shù)量的不相似函數(shù)對(duì)并標(biāo)記為-1,共計(jì)得到401 050對(duì)X86平臺(tái)函數(shù),900 490對(duì)跨平臺(tái)函數(shù)。

小片段代碼數(shù)據(jù)集是滿足一定條件的基礎(chǔ)數(shù)據(jù)集的子集。在小片段代碼數(shù)據(jù)集構(gòu)建上,僅僅保留X86平臺(tái)基礎(chǔ)數(shù)據(jù)集中不超過3個(gè)基本塊的函數(shù)對(duì)、X86平臺(tái)基礎(chǔ)數(shù)據(jù)集中不超過5個(gè)基本塊的函數(shù)對(duì)和跨平臺(tái)基礎(chǔ)數(shù)據(jù)集中不超過5個(gè)基本塊的函數(shù)對(duì),分別得到Dataset_A、Dataset_B和Dataset_C數(shù)據(jù)集。小片段代碼數(shù)據(jù)集見表2。

表2 小片段代碼數(shù)據(jù)集

3.3 基準(zhǔn)Baseline

為便于分析對(duì)比,用BSMSAFE表示本文BSM模型是在SAFE函數(shù)嵌入基礎(chǔ)之上通過融合知識(shí)嵌入的方式得到。同樣,可得到對(duì)應(yīng)的比較模型BSMi2v和BSMGemini。

同SAFE、Gemini、I2V一樣,將準(zhǔn)確率作為衡量模型的對(duì)比標(biāo)準(zhǔn)。每訓(xùn)練一輪,則在驗(yàn)證數(shù)據(jù)集上計(jì)算當(dāng)前驗(yàn)證準(zhǔn)確率Val Auc。如果當(dāng)前驗(yàn)證準(zhǔn)確率最高,則進(jìn)行測(cè)試數(shù)據(jù)集計(jì)算,得到測(cè)試準(zhǔn)確率Test Auc。通過這種方式,得到每種模型的最優(yōu)驗(yàn)證集準(zhǔn)確率Val Auc和最優(yōu)測(cè)試集準(zhǔn)確率Test Auc。

3.4 參數(shù)設(shè)置與訓(xùn)練

為生成token向量,本文采用基于Skip-gram策略的word2vec詞向量模型將每個(gè)token轉(zhuǎn)換為向量形式。利用2.2節(jié)的方法對(duì)文獻(xiàn)[16]中提供的464個(gè)二進(jìn)制文件,利用Radare2工具提取并生成二進(jìn)制函數(shù)控制流程圖CFG后,借助NetworkX提取圖中簡(jiǎn)單路徑,將其一條路徑上攜帶的函數(shù)代碼知識(shí)切分后看作一行句子。將生成的8400萬行句子作為數(shù)據(jù)集,喂入word2vec詞向量模型進(jìn)行詞向量訓(xùn)練,最終得到包含8756個(gè)token的知識(shí)詞向量詞典。word2vec全局參數(shù)設(shè)置如下:token詞向量設(shè)置為96維,滑動(dòng)窗口大小設(shè)置為5,詞頻設(shè)置為5。

為做到在相同實(shí)驗(yàn)條件下開展方案間對(duì)比,基于表2小片段代碼數(shù)據(jù)集,模型采用SAFE[8]提供的指令詞向量詞典和本文訓(xùn)練得到的token知識(shí)詞向量詞典,將Adam作為優(yōu)化器,均方誤差MSE(mean square error)作為損失函數(shù)。

4 實(shí)驗(yàn)與結(jié)果分析

本章在單平臺(tái)序列表示學(xué)習(xí)相似性任務(wù)、單平臺(tái)圖表示學(xué)習(xí)相似性任務(wù)和跨平臺(tái)相似性任務(wù)上給出模型間比較結(jié)果。

4.1 單平臺(tái)序列表示學(xué)習(xí)相似性任務(wù)對(duì)比

本任務(wù)選擇Dataset_A作為數(shù)據(jù)集,從序列學(xué)習(xí)角度對(duì)比BSMSAFE和SAFE模型。在序列長(zhǎng)度設(shè)置上,Dataset_A設(shè)置指令序列長(zhǎng)度60,30個(gè)token知識(shí)(超出部分截?cái)?,不足部分補(bǔ)齊)。指令序列學(xué)習(xí)模型采用攜帶注意力機(jī)制的雙向GRU,函數(shù)嵌入結(jié)果64維。模型訓(xùn)練50輪,每批數(shù)據(jù)大小為250?;緣K范圍[1-3]序列表示學(xué)習(xí)模型間比較見表3。

表3 基本塊范圍[1-3]序列表示學(xué)習(xí)模型間比較

從表3的BSMSAFE與SAFE對(duì)比來看,融合知識(shí)表示學(xué)習(xí)的BSMSAFE模型提升了準(zhǔn)確率,在Dataset_A測(cè)試集上準(zhǔn)確率高達(dá)98.37%。鑒于SAFE采用攜帶注意力機(jī)制的GRU方案,因此BSM同時(shí)對(duì)比了RNN、BiLSTM等序列神經(jīng)網(wǎng)絡(luò)模型。與SAFE不同的是,這些模型不攜帶注意力機(jī)制。未攜帶注意力機(jī)制的序列表示學(xué)習(xí)模型間比較見表4。

表4 未攜帶注意力機(jī)制的序列表示學(xué)習(xí)模型間比較

對(duì)比未融合函數(shù)知識(shí)表示的RNN和BiLSTM模型,BSM在Dataset_A上準(zhǔn)確率分別提升4.8%和5.7%。同時(shí)進(jìn)一步發(fā)現(xiàn),攜帶注意力機(jī)制的BSMSAFE序列模型準(zhǔn)確率在二進(jìn)制小代碼片段上為98.37%,高于RNN模型30.4%。這說明注意力機(jī)制能夠聚焦二進(jìn)制代碼相似性比較任務(wù)更為關(guān)鍵的信息,提升任務(wù)準(zhǔn)確率。

4.2 單平臺(tái)圖表示學(xué)習(xí)相似性任務(wù)對(duì)比

本次任務(wù)選擇Dataset_B作為數(shù)據(jù)集,在X86單平臺(tái)上從圖嵌入學(xué)習(xí)角度,對(duì)比BSMGemini和Gemini模型,BSMI2V和I2V模型。圖嵌入訓(xùn)練參數(shù)設(shè)置如下:基本塊指令序列最大長(zhǎng)度為20,基本塊數(shù)量為5,函數(shù)最多30個(gè)token知識(shí),函數(shù)嵌入結(jié)果64維,訓(xùn)練10輪,每批數(shù)據(jù)大小為250。單平臺(tái)圖表示學(xué)習(xí)方案間比較見表5。

表5 單平臺(tái)圖表示學(xué)習(xí)方案間比較

如表5實(shí)驗(yàn)結(jié)果所示,融合知識(shí)嵌入的BSM模型準(zhǔn)確率均有顯著提升。BSMGemini模型準(zhǔn)確率比Gemini模型提升3.4%,BSMI2V模型準(zhǔn)確率比I2V模型上提升4.0%。Transformer作為當(dāng)前比較火熱的編碼模型,本文也進(jìn)行了對(duì)比,發(fā)現(xiàn)基本塊上采用Transformer編碼方案,在準(zhǔn)確率上不如I2V采用的攜帶注意力機(jī)制的BiLSTM方案。分析其原因可能在于Transformer機(jī)制在于僅僅考慮注意力,而基本塊上的指令天然具有序列含義。也或許Transformer在編碼和解碼同時(shí)采用的時(shí)候性能最佳。這也進(jìn)一步說明最優(yōu)的、最先進(jìn)的神經(jīng)模型,還需要在二進(jìn)制代碼相似性比較任務(wù)上給出最佳實(shí)踐。

對(duì)比表3和表5,發(fā)現(xiàn)序列學(xué)習(xí)表示模型優(yōu)于圖嵌入表示模型,如BSMSAFE模型準(zhǔn)確率高于BSMGemini模型8%,BSMSAFE模型準(zhǔn)確率高于BSMI2V模型2%,說明利用節(jié)點(diǎn)鄰居更新節(jié)點(diǎn)表示的圖神經(jīng)網(wǎng)絡(luò)GNN在簡(jiǎn)單結(jié)構(gòu)圖上并不足以捕獲函數(shù)豐富的語(yǔ)義。從表5發(fā)現(xiàn),BSM未在Dataset_A數(shù)據(jù)集上做驗(yàn)證比較。這是因?yàn)?,?shù)據(jù)集分析發(fā)現(xiàn)基本塊數(shù)量范圍[1-3]中,85%的函數(shù)僅僅攜帶一個(gè)基本塊,對(duì)于包含2個(gè)基本塊的函數(shù)可用一個(gè)序列表示,包含3個(gè)基本塊的函數(shù)最多表現(xiàn)為2條序列。

4.3 跨平臺(tái)相似性任務(wù)對(duì)比

為驗(yàn)證函數(shù)知識(shí)不隨平臺(tái)改變而改變,代碼越相似性知識(shí)越穩(wěn)定的特性,BSM模型在跨平臺(tái)相似性任務(wù)上分別對(duì)比SAFE模型、Gemini模型和I2V模型。即在跨平臺(tái)數(shù)據(jù)集Dataset_C上,從序列嵌入學(xué)習(xí)角度對(duì)比SAFE,從圖嵌入學(xué)習(xí)角度對(duì)比Gemini和I2V。模型全局參數(shù)和單平臺(tái)保持一致。跨平臺(tái)方案間比較見表6。

表6 跨平臺(tái)方案間比較

表6對(duì)比發(fā)現(xiàn),融合知識(shí)嵌入的BSM方案在跨平臺(tái)上有較大準(zhǔn)確率提升,BSMGemini在準(zhǔn)確率方面優(yōu)于Gemini方案6.2%,BSMI2V在準(zhǔn)確率方面優(yōu)于I2V方案4.7%,BSMSAFE在準(zhǔn)確率方面優(yōu)于SAFE方案4.1%。這說明知識(shí)的不變特性有助于縮小跨平臺(tái)指令帶來的語(yǔ)義鴻溝。

同時(shí),對(duì)比表5和表6發(fā)現(xiàn),融合知識(shí)表示學(xué)習(xí)的BSM方案在準(zhǔn)確率提升幅度上跨平臺(tái)要高于單平臺(tái),如BSMGemini和Gemini方案對(duì)比中跨平臺(tái)準(zhǔn)確率提升是6.2%,單平臺(tái)提升是3.4%,說明知識(shí)不隨平臺(tái)改變而改變,相對(duì)指令巨大差異來講知識(shí)具有跨平臺(tái)穩(wěn)定特性。

4.4 不同知識(shí)學(xué)習(xí)表示對(duì)比

將提取到的函數(shù)代碼知識(shí)分別從序列學(xué)習(xí)表示和圖學(xué)習(xí)表示角度生成知識(shí)嵌入,驗(yàn)證不同知識(shí)表示學(xué)習(xí)方式給模型帶來的影響。在圖學(xué)習(xí)表示實(shí)現(xiàn)上,采用補(bǔ)齊或者截?cái)嗟姆绞?,設(shè)置基本塊token知識(shí)序列長(zhǎng)度為5,將其得到的基本塊嵌入利用structure2vec技術(shù)生成知識(shí)嵌入。在序列學(xué)習(xí)表示實(shí)現(xiàn)上,按照基本塊線性地址存儲(chǔ)順序提取函數(shù)代碼知識(shí),并設(shè)置函數(shù)token知識(shí)序列長(zhǎng)度為30(采用補(bǔ)齊或者截?cái)嗟姆绞?,采用攜帶注意力機(jī)制的BiLSTM技術(shù)生成知識(shí)嵌入。經(jīng)過實(shí)驗(yàn)驗(yàn)證,知識(shí)圖學(xué)習(xí)表示在提升模型準(zhǔn)確率上不如知識(shí)序列學(xué)習(xí)表示,存在2%左右的差距。

綜上,3個(gè)任務(wù)實(shí)驗(yàn)結(jié)果表明,本文提出的BSM模型對(duì)比基于線性地址序列函數(shù)嵌入和基于基本塊邏輯調(diào)用圖函數(shù)嵌入均表現(xiàn)出色,知識(shí)表示學(xué)習(xí)可提升二進(jìn)制小代碼片段相似性比較結(jié)果,驗(yàn)證了知識(shí)并不隨軟件編譯優(yōu)化和跨平臺(tái)的改變而改變。融合知識(shí)表示可更準(zhǔn)確反映代碼間相似性比較結(jié)果。

5 結(jié)束語(yǔ)

本文借鑒軟件攜帶并傳承人類知識(shí)經(jīng)驗(yàn)的思想,提取二進(jìn)制代碼片段上的函數(shù)代碼知識(shí),利用知識(shí)的跨平臺(tái)遺傳穩(wěn)定特性,提出一種融合知識(shí)嵌入和函數(shù)嵌入的二進(jìn)制代碼小片段相似性比較模型。在3個(gè)數(shù)據(jù)集上進(jìn)行單平臺(tái)和跨平臺(tái)對(duì)比實(shí)驗(yàn),結(jié)果表明模型能提升小片段代碼相似性比較結(jié)果的準(zhǔn)確性。當(dāng)前本文函數(shù)代碼知識(shí)僅考慮函數(shù)名和API,作為軟件開發(fā)者工作經(jīng)驗(yàn)的知識(shí)還包括變量名、變量類型,因此,從二進(jìn)制代碼中提取這些表達(dá)軟件開發(fā)者經(jīng)驗(yàn)的高級(jí)知識(shí)有助于代碼相似性比較。在下一步研究工作中,將借助調(diào)試信息預(yù)測(cè)[17]、函數(shù)命名推理[18]和多文件函數(shù)交互[19]等高級(jí)語(yǔ)義或語(yǔ)用信息,為完成代碼相似性、代碼搜索等下游任務(wù)提供知識(shí)增強(qiáng)服務(wù)。

猜你喜歡
基本塊跨平臺(tái)二進(jìn)制
基于級(jí)聯(lián)森林的控制流錯(cuò)誤檢測(cè)優(yōu)化算法
用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
距離與權(quán)重相結(jié)合的導(dǎo)向式灰盒模糊測(cè)試方法
一種檢測(cè)控制流錯(cuò)誤的多層分段標(biāo)簽方法
有趣的進(jìn)度
二進(jìn)制在競(jìng)賽題中的應(yīng)用
跨平臺(tái)APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
基于QT的跨平臺(tái)輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
基于OPC跨平臺(tái)通信的電機(jī)監(jiān)測(cè)與診斷系統(tǒng)
基于B/S的跨平臺(tái)用戶界面可配置算法研究
绥化市| 克东县| 三明市| 友谊县| 钦州市| 沁水县| 阿拉尔市| 永仁县| 永新县| 永宁县| 绩溪县| 都匀市| 阜康市| 和龙市| 紫金县| 榕江县| 武隆县| 虞城县| 崇义县| 进贤县| 克山县| 门源| 乌鲁木齐县| 兰考县| 巴彦淖尔市| 茌平县| 阜城县| 凤冈县| 宜章县| 乌拉特中旗| 德令哈市| 横峰县| 吴忠市| 辽宁省| 山东省| 兴安县| 玛多县| 大安市| 乌海市| 互助| 伊宁市|