本申請(qǐng)涉及程序分析,具體涉及一種程序分析方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、在現(xiàn)代軟件開發(fā)中,程序分析和優(yōu)化技術(shù)正不斷發(fā)展,以滿足對(duì)高效、可靠和安全軟件的需求。程序依賴關(guān)系的分析,尤其是變量依賴關(guān)系的提取,是編譯器優(yōu)化、程序調(diào)試、代碼理解和安全分析等關(guān)鍵任務(wù)的核心。目前,程序依賴關(guān)系的分析是通過編譯器將源程序進(jìn)行編譯得到中間程序后,基于中間程序進(jìn)行程序依賴分析,得到程序依賴分析結(jié)果。
2、然而,現(xiàn)有技術(shù)中的程序依賴分析結(jié)果雖然也能體現(xiàn)變量依賴關(guān)系,但其中往往還涉及到編譯過程中產(chǎn)生的臨時(shí)變量的依賴關(guān)系,無法直觀反映出在源代碼中原始變量的依賴關(guān)系。
技術(shù)實(shí)現(xiàn)思路
1、本申請(qǐng)?zhí)峁┝艘环N程序分析方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),可以去除與臨時(shí)變量節(jié)點(diǎn)相關(guān)的變量節(jié)點(diǎn)依賴信息,提升原始變量依賴分析結(jié)果的準(zhǔn)確性和清晰性,進(jìn)而生成更加清楚直觀的原始變量數(shù)據(jù)的變量依賴表示信息,以方便開發(fā)人員基于原始變量的依賴關(guān)系進(jìn)行程序調(diào)試和進(jìn)一步開發(fā),本申請(qǐng)技術(shù)方案如下:
2、一方面,提供了一種程序分析方法,所述方法包括:
3、獲取原始程序?qū)?yīng)的中間程序的程序依賴信息,所述程序依賴信息包括:多個(gè)中間程序節(jié)點(diǎn)和所述多個(gè)中間程序節(jié)點(diǎn)之間的程序節(jié)點(diǎn)依賴信息;
4、基于所述程序節(jié)點(diǎn)依賴信息和每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的指令類型,將所述每個(gè)中間程序節(jié)點(diǎn)確定為原始變量節(jié)點(diǎn)或臨時(shí)變量節(jié)點(diǎn),并提取所述每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息;
5、將所述多個(gè)中間程序節(jié)點(diǎn)中每個(gè)臨時(shí)變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息合并至依賴所述每個(gè)臨時(shí)變量節(jié)點(diǎn)的原始變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息,得到所述多個(gè)中間程序節(jié)點(diǎn)中每個(gè)原始變量節(jié)點(diǎn)對(duì)應(yīng)的第二變量節(jié)點(diǎn)依賴信息;
6、基于所述第二變量節(jié)點(diǎn)依賴信息,生成所述原始程序中原始變量數(shù)據(jù)的變量依賴表示信息。
7、另一方面,提供了一種程序分析裝置,所述裝置包括:
8、程序依賴信息獲取模塊,用于獲取原始程序?qū)?yīng)的中間程序的程序依賴信息,所述程序依賴信息包括:多個(gè)中間程序節(jié)點(diǎn)和所述多個(gè)中間程序節(jié)點(diǎn)之間的程序節(jié)點(diǎn)依賴信息;
9、變量依賴信息提取模塊,用于基于所述程序節(jié)點(diǎn)依賴信息和每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的指令類型,將所述每個(gè)中間程序節(jié)點(diǎn)確定為原始變量節(jié)點(diǎn)或臨時(shí)變量節(jié)點(diǎn),并提取所述每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息;
10、變量依賴信息合并模塊,用于將所述多個(gè)中間程序節(jié)點(diǎn)中每個(gè)臨時(shí)變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息合并至依賴所述每個(gè)臨時(shí)變量節(jié)點(diǎn)的原始變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息,得到所述多個(gè)中間程序節(jié)點(diǎn)中每個(gè)原始變量節(jié)點(diǎn)對(duì)應(yīng)的第二變量節(jié)點(diǎn)依賴信息;
11、變量依賴信息表示模塊,用于基于所述第二變量節(jié)點(diǎn)依賴信息,生成所述原始程序中原始變量數(shù)據(jù)的變量依賴表示信息。
12、另一方面,提供了一種程序分析設(shè)備,所述設(shè)備包括處理器和存儲(chǔ)器,所述存儲(chǔ)器中存儲(chǔ)有至少一條指令或至少一段程序,所述至少一條指令或所述至少一段程序由所述處理器加載并執(zhí)行以實(shí)現(xiàn)如上述的程序分析方法。
13、另一方面,提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)中存儲(chǔ)有至少一條指令或至少一段程序,所述至少一條指令或所述至少一段程序由處理器加載并執(zhí)行以實(shí)現(xiàn)如上述的程序分析方法。
14、本申請(qǐng)?zhí)峁┑某绦蚍治龇椒?、裝置、設(shè)備及存儲(chǔ)介質(zhì),具有如下技術(shù)效果:
15、利用本申請(qǐng)?zhí)峁┑募夹g(shù)方案,獲取原始程序?qū)?yīng)的中間程序的程序依賴信息,該程序依賴信息包括:多個(gè)中間程序節(jié)點(diǎn)和多個(gè)中間程序節(jié)點(diǎn)之間的程序節(jié)點(diǎn)依賴信息,以多個(gè)中間程序節(jié)點(diǎn)中的根節(jié)點(diǎn)為起點(diǎn),基于程序節(jié)點(diǎn)依賴信息和每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的指令類型,將每個(gè)中間程序節(jié)點(diǎn)確定為原始變量節(jié)點(diǎn)或臨時(shí)變量節(jié)點(diǎn),并提取每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息,可以在提升節(jié)點(diǎn)變量分類的準(zhǔn)確性的基礎(chǔ)上,提升變量依賴分析的準(zhǔn)確性,然后將多個(gè)中間程序節(jié)點(diǎn)中每個(gè)臨時(shí)變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息合并至依賴每個(gè)臨時(shí)變量節(jié)點(diǎn)的原始變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息,得到多個(gè)中間程序節(jié)點(diǎn)中每個(gè)原始變量節(jié)點(diǎn)對(duì)應(yīng)的第二變量節(jié)點(diǎn)依賴信息,并基于第二變量節(jié)點(diǎn)依賴信息,生成原始程序的變量依賴表示信息,通過去除與臨時(shí)變量節(jié)點(diǎn)相關(guān)的第一變量節(jié)點(diǎn)依賴信息,提升原始變量依賴分析結(jié)果的準(zhǔn)確性和清晰性,進(jìn)而生成更加清楚直觀的原始變量數(shù)據(jù)的變量依賴表示信息,以方便開發(fā)人員基于原始變量的依賴關(guān)系進(jìn)行程序調(diào)試和進(jìn)一步開發(fā)。
1.一種程序分析方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述基于所述程序節(jié)點(diǎn)依賴信息和每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的指令類型,將所述每個(gè)中間程序節(jié)點(diǎn)確定為原始變量節(jié)點(diǎn)或臨時(shí)變量節(jié)點(diǎn),并提取所述每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息包括:
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述基于所述第二節(jié)點(diǎn)對(duì)應(yīng)的指令類型,確定所述第二節(jié)點(diǎn)為原始變量節(jié)點(diǎn)或臨時(shí)變量節(jié)點(diǎn)包括:
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述基于所述待分析節(jié)點(diǎn)集合中任一待分析節(jié)點(diǎn)更新所述第一當(dāng)前分析節(jié)點(diǎn),得到更新后的第一當(dāng)前分析節(jié)點(diǎn)之前,所述方法還包括:
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述每個(gè)中間程序節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息包括:所述每個(gè)中間程序節(jié)點(diǎn)的變量依賴節(jié)點(diǎn)集合,所述將所述多個(gè)中間程序節(jié)點(diǎn)中每個(gè)臨時(shí)變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息合并至依賴所述每個(gè)臨時(shí)變量節(jié)點(diǎn)的原始變量節(jié)點(diǎn)對(duì)應(yīng)的第一變量節(jié)點(diǎn)依賴信息,得到所述多個(gè)中間程序節(jié)點(diǎn)中每個(gè)原始變量節(jié)點(diǎn)對(duì)應(yīng)的第二變量節(jié)點(diǎn)依賴信息包括:
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述每個(gè)原始變量節(jié)點(diǎn)對(duì)應(yīng)的第二變量節(jié)點(diǎn)依賴信息包括:所述每個(gè)原始變量節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)依賴信息和所述每個(gè)原始變量節(jié)點(diǎn)對(duì)應(yīng)的控制依賴信息,所述基于所述第二變量節(jié)點(diǎn)依賴信息,生成所述原始程序中原始變量數(shù)據(jù)的變量依賴表示信息包括:
7.根據(jù)權(quán)利要求1至6任一所述的方法,其特征在于,所述多個(gè)中間程序節(jié)點(diǎn)之間的程序節(jié)點(diǎn)依賴信息是通過如下方式獲取的:
8.一種程序分析裝置,其特征在于,所述裝置包括:
9.一種電子設(shè)備,其特征在于,所述設(shè)備包括處理器和存儲(chǔ)器,所述存儲(chǔ)器中存儲(chǔ)有至少一條指令或至少一段程序,所述至少一條指令或所述至少一段程序由所述處理器加載并執(zhí)行以實(shí)現(xiàn)如權(quán)利要求1至7任一所述的程序分析方法。
10.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述存儲(chǔ)介質(zhì)中存儲(chǔ)有至少一條指令或至少一段程序,所述至少一條指令或所述至少一段程序由處理器加載并執(zhí)行以實(shí)現(xiàn)如權(quán)利要求1至7任一所述的程序分析方法。