本說明書實施例提供一種代碼分析方法,包括:獲取待分析代碼的歷史運行數據;其中,所述歷史運行數據包括所述待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系;基于待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系,生成函數調用圖;對所述待分析代碼進行靜態分析,并在所述靜態分析過程中,如果待分析的目標函數存在多個可調用的函數時,查詢所述函數調用圖,確定與所述待分析的目標函數存在調用關系的函數,并基于查詢的結果進一步完成針對所述目標函數的靜態分析。上述方案不僅易于實現、容易部署,還可以通過在靜態分析過程中通過查詢函數調用圖來提升準確度。數調用圖來提升準確度。數調用圖來提升準確度。
【技術實現步驟摘要】
一種代碼分析方法、裝置、電子設備及存儲介質
[0001]本說明書涉及計算機
,尤其涉及一種代碼分析方法、裝置、電子設備及存儲介質。
技術介紹
[0002]代碼,是程序員使用開發工具所支持的語言寫出來的源文件,是一組有序的數字或字母的排列,是代表客觀實體及其屬性的符號。程序員通過編寫代碼,可以實現相應的功能,比如通過編寫代碼執行數據統計任務。
[0003]然而,由于代碼需要以規定的語法編寫才能正常運行,如果出現語法錯誤,將導致代碼無法執行,也就無法實現相應的功能。并且,由于代碼通常多而復雜,代碼在執行過程中很可能存在無法預知的漏洞,很可能帶來非常嚴重的后果,比如目前大家對自己的隱私數據越來越關注,一旦因為代碼漏洞導致用戶隱私數據泄露,不僅影響了用戶的隱私安全,更會對公司造成無法挽回的負面影響。
[0004]因此,為了確保代碼的穩定性和可靠性,降低代碼錯誤導致的風險,在編寫出代碼之后,還需要進行代碼分析,對代碼進行各種檢測。
技術實現思路
[0005]有鑒于此,本說明書一個或多個實施例提供一種代碼分析方法、裝置、電子設備及存儲介質,以解決相關技術中存在的問題。
[0006]為實現上述目的,本說明書一個或多個實施例提供技術方案如下:
[0007]根據本說明書實施例的第一方面,提供一種代碼分析方法,所述方法包括:
[0008]獲取待分析代碼的歷史運行數據;其中,所述歷史運行數據包括所述待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系;
[0009]基于待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系,生成函數調用圖;
[0010]對所述待分析代碼進行靜態分析,并在所述靜態分析過程中,如果待分析的目標函數存在多個可調用的函數時,查詢所述函數調用圖,確定與所述待分析的目標函數存在調用關系的函數,并基于查詢的結果進一步完成針對所述目標函數的靜態分析。
[0011]根據本說明書實施例的第二方面,提供一種代碼分析裝置,所述裝置包括:
[0012]獲取模塊,獲取待分析代碼的歷史運行數據;其中,所述歷史運行數據包括所述待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系;
[0013]生成模塊,基于待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系,生成函數調用圖;
[0014]分析模塊,對所述待分析代碼進行靜態分析,并在所述靜態分析過程中,如果待分析的目標函數存在多個可調用的函數時,查詢所述函數調用圖,確定與所述待分析的目標函數存在調用關系的函數,并基于查詢的結果進一步完成針對所述目標函數的靜態分析。
[0015]根據本說明書實施例的第三方面,提供一種電子設備,包括通信接口、處理器、存儲器和總線,所述通信接口、所述處理器和所述存儲器之間通過總線相互連接;
[0016]所述存儲器中存儲機器可讀指令,所述處理器通過調用所述機器可讀指令,執行上述方法。
[0017]根據本說明書實施例的第四方面,提供一種機器可讀存儲介質,所述機器可讀存儲介質存儲有機器可讀指令,所述機器可讀指令在被處理器調用和執行時,實現上述方法。
[0018]本說明書的實施例提供的技術方案可以包括以下有益效果:
[0019]在上述過程中,可以根據待分析代碼在運行過程中所調用的函數,以及函數之間的調用關系,生成函數調用圖,并在對待分析代碼進行靜態分析過程中,在待分析的目標函數存在多個可調用的函數時查詢函數調用圖,以確定與待分析的目標函數存在調用關系的函數,并基于查詢的結果進一步完成針對目標函數的靜態分析。通過以上技術方案,一方面,通過基于容易獲取到的函數及其調用關系來生成函數調用圖,使得本方案易于實現,容易部署;另一方面,通過在靜態分析過程中查詢函數調用圖,可以針對存在多個可調用的函數的待分析的目標函數確定與之對應的存在調用關系的函數,從而提升靜態分析時的準確度。
附圖說明
[0020]圖1為本說明書一示例性實施例提供的一種代碼分析方法的流程圖;
[0021]圖2為本說明書一示例性實施例提供的一種生成函數調用圖的示意圖;
[0022]圖3為本說明書一示例性實施例提供的一種靜態分析過程的示意圖;
[0023]圖4為本說明書一示例性實施例提供的一種代碼分析裝置所在電子設備的結構示意圖;
[0024]圖5為本說明書一示例性實施例提供的一種代碼分析裝置的框圖。
具體實施方式
[0025]這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本說明書一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本說明書一個或多個實施例的一些方面相一致的裝置和方法的例子。
[0026]需要說明的是:在其他實施例中并不一定按照本說明書示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合并為單個步驟進行描述。
[0027]目前,可以通過對代碼進行靜態分析以實現對代碼的檢測。靜態分析是指在不實際運行代碼的情況下,對代碼語義和行為進行分析,檢查代碼是否符合編碼標準,并找出代碼中的漏洞,比如由于錯誤的編碼導致異常的代碼語義,或者未定義的行為。通過靜態分析,可以無需構建運行環境,編寫測試用例,在代碼編寫的早期階段就能發現代碼中的各種
問題,提高開發效率和軟件質量。
[0028]舉例來說,在Java中,對于應用的JAR文件,可以通過靜態分析工具進行靜態分析,自動提取軟件知識得到應用的程序脈絡,以幫助理解應用程序,比如,應用程序有沒有空指針異常,某個中間變量能不能傳到數據庫,某個輸入字段有沒有被用作重要的分支判斷條件,某幾個字段有沒有可能的資金計算關系等。
[0029]值得說明的是,在進行靜態分析時,上述程序脈絡可以劃分為數據脈絡、控制脈絡和邏輯脈絡三種。
[0030]其中,數據脈絡關注數據通過直接賦值或參與計算后賦值傳遞關系,比如當b=a+3時,那么可以認為b受到了a的數據影響;
[0031]控制脈絡關注數據作為判斷條件的一部分對應用程序的影響,比如當if(a>0){b=3}時,那么可以認為b受到了a的控制影響;
[0032]邏輯脈絡關注數據間的邏輯關系,比如z=x+y中體現的邏輯關系。
[0033]程序脈絡不同于常規的程序分析,常規的程序分析大多為函數內的行為分析,而基于程序脈絡可以追蹤每個變量在一個應用范圍內的傳播關系,比如,即使某個變量穿越了100層函數,也可以基于程序脈絡進行追蹤,因此,通過程序脈絡可以加深對應用程序的理解,有助于進行軟件風險挖掘。
...
【技術保護點】
【技術特征摘要】
1.一種代碼分析方法,包括:獲取待分析代碼的歷史運行數據;其中,所述歷史運行數據包括所述待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系;基于待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系,生成函數調用圖;對所述待分析代碼進行靜態分析,并在所述靜態分析過程中,如果待分析的目標函數存在多個可調用的函數時,查詢所述函數調用圖,確定與所述待分析的目標函數存在調用關系的函數,并基于查詢的結果進一步完成針對所述目標函數的靜態分析。2.根據權利要求1所述的方法,在基于待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系,生成函數調用圖之前,所述方法還包括:運行植入在所述待分析代碼中的插樁代碼,收集所述待分析代碼的歷史運行數據。3.根據權利要求2所述的方法,所述歷史運行數據包括所述待分析代碼在歷史運行過程中產生的上下文數據。4.根據權利要求1所述的方法,所述基于待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系,生成函數調用圖,包括:基于所述待分析代碼在運行過程中所調用的函數,以及所述函數之間的調用關系,確定所述待分析代碼中在運行過程中所調用函數對應的調用路徑,并對經過相同調用路徑的函數進行聚合,生成所述函數調用圖。5.根據權利要求1所述的方法,在所述靜態分析過程中,如果待分析的目標函數存在多個可調用的函數時,查詢所述函數調用圖,確定與所述待分析的目標函數存在調用關系的函數,并基于查詢的結果進一步完成針對所述目標函數的靜態分析,包括:在所述靜態分析過程中,如果待分析的目標函數為預設函數,并且所述預...
【專利技術屬性】
技術研發人員:吳迪宇,劉江潮,劉潔瑞,鄭恒杰,狄鵬,
申請(專利權)人:支付寶杭州信息技術有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。