一種棧安全檢測方法與系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種棧安全檢測方法及系統(tǒng)。棧安全檢測方法包括:加載可執(zhí)行文件;以所述可執(zhí)行文件的入口函數(shù)為起點獲取可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷是否存在函數(shù)環(huán)路調(diào)用;當(dāng)可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。棧安全檢測系統(tǒng)包括:可執(zhí)行文件加載模塊,用于加載待分析的可執(zhí)行文件;函數(shù)調(diào)用分析模塊,與可執(zhí)行文件加載模塊相連,用于以所述可執(zhí)行文件的入口函數(shù)為起點獲取可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷所述函數(shù)調(diào)用樹中是否存在函數(shù)調(diào)用環(huán)路;當(dāng)可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。本發(fā)明的技術(shù)方案用于系統(tǒng)任務(wù)棧溢出問題的定位分析。
【專利說明】一種棧安全檢測方法與系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種計算機【技術(shù)領(lǐng)域】,特別是涉及一種棧安全檢測方法與系統(tǒng)。
【背景技術(shù)】
[0002]在計算機科學(xué)領(lǐng)域中,’調(diào)用?!?Call Stack)是用于存儲子程序信息的一類棧,別稱執(zhí)行棧(execut1n stack)、控制棧(control stack)、運行時棧(run-time stack)與機器棧(machine stack),在英語中亦經(jīng)常簡稱為“?!?“the stack”)。調(diào)用棧的維護對多數(shù)軟件的正常運轉(zhuǎn)有著重要意義,但一般高級語言都會隱藏其細節(jié)并自動進行維護。
[0003]嵌入式系統(tǒng)中每一個任務(wù)的棧空間都很小,在系統(tǒng)運行過程中很容易產(chǎn)生任務(wù)棧溢出導(dǎo)致系統(tǒng)復(fù)位,影響系統(tǒng)的穩(wěn)定性。系統(tǒng)運行過程中一個任務(wù)的棧溢出通常由兩個原因引起:一是調(diào)用的函數(shù)層次過深或者調(diào)用的函數(shù)申請的??臻g太大。二是函數(shù)調(diào)用環(huán)路,如遞歸調(diào)用。以上兩個原因以第二個原因?qū)е孪到y(tǒng)復(fù)位更為常見,因此在嵌入式系統(tǒng)的開發(fā)過程中都會盡量避免直接或者間接的函數(shù)遞歸調(diào)用。
[0004]鑒于此,為了確定或避免函數(shù)調(diào)用環(huán)路引發(fā)棧溢出問題,如何對系統(tǒng)加載運行的映像文件進行函數(shù)調(diào)用環(huán)路檢測成為了本領(lǐng)域技術(shù)人員亟待解決的問題。
【發(fā)明內(nèi)容】
[0005]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種棧安全檢測方法及系統(tǒng),用于解決現(xiàn)有技術(shù)中運行映像文件出現(xiàn)函數(shù)調(diào)用環(huán)路而引發(fā)的棧溢出難以定位的問題。
[0006]為實現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種棧安全檢測方法,所述棧安全檢測方法包括:加載可執(zhí)行文件;以所述可執(zhí)行文件的入口函數(shù)為起點獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷是否存在函數(shù)環(huán)路調(diào)用;當(dāng)所述可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。
[0007]可選地,所述獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹的具體實現(xiàn)包括:以所述可執(zhí)行文件的入口函數(shù)為起點,通過反匯編分析方法遞歸獲取所述可執(zhí)行文件中的一個函數(shù)所調(diào)用的所有子函數(shù),以獲取函數(shù)調(diào)用樹。
[0008]可選地,所述反匯編分析方法與所述可執(zhí)行文件的機器語言一一對應(yīng)。
[0009]可選地,所述判斷是否存在函數(shù)環(huán)路調(diào)用的具體實現(xiàn)為:檢測函數(shù)調(diào)用樹中每一個函數(shù)所調(diào)用的子函數(shù)節(jié)點是否在所述可執(zhí)行文件入口函數(shù)到所述函數(shù)的運行路徑上出現(xiàn)過,如果有出現(xiàn)過則為存在函數(shù)環(huán)路調(diào)用。
[0010]可選地,所述可執(zhí)行文件包括嵌入式系統(tǒng)中的映像文件。
[0011]本發(fā)明還提供一種棧安全檢測系統(tǒng),所述棧安全檢測系統(tǒng)包括:可執(zhí)行文件加載模塊,用于加載待分析的可執(zhí)行文件;函數(shù)調(diào)用分析模塊,與所述可執(zhí)行文件加載模塊相連,用于以所述可執(zhí)行文件的入口函數(shù)為起點獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷所述函數(shù)調(diào)用樹中是否存在函數(shù)調(diào)用環(huán)路;當(dāng)所述可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。
[0012]可選地,所述函數(shù)調(diào)用分析模塊包括反匯編單元,所述反匯編單元用于獲取所述可執(zhí)行文件的一個函數(shù)所調(diào)用的所有子函數(shù);所述調(diào)用分析函數(shù)通過所述反匯編單元獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹。
[0013]可選地,所述反匯編單元與所述可執(zhí)行文件的機器語言一一對應(yīng)。
[0014]可選地,所述判斷是否存在函數(shù)環(huán)路調(diào)用的具體實現(xiàn)為:檢測函數(shù)調(diào)用樹中每一個函數(shù)所調(diào)用的子函數(shù)節(jié)點是否在所述可執(zhí)行文件入口函數(shù)到所述函數(shù)的運行路徑上出現(xiàn)過,如果有出現(xiàn)過則為存在函數(shù)環(huán)路調(diào)用。
[0015]可選地,所述可執(zhí)行文件包括嵌入式系統(tǒng)中的映像文件。
[0016]如上所述,本發(fā)明的一種棧安全檢測方法及系統(tǒng),具有以下有益效果:通過一種簡單且容易實現(xiàn)的技術(shù)方案,運用反匯編手段分析系統(tǒng)的可加載映像文件,檢測出任務(wù)中存在的環(huán)路調(diào)用點,為系統(tǒng)任務(wù)棧使用或者任務(wù)棧溢出問題的定位分析提供有效的數(shù)據(jù),可以加快相關(guān)問題的定位。
【專利附圖】
【附圖說明】
[0017]圖1顯示為本發(fā)明的一種棧安全檢測方法的一實施例的方法示意圖。
[0018]圖2顯示為本發(fā)明的一種棧安全檢測方法的一實施例的方法步驟示意圖。
[0019]圖3顯示為本發(fā)明的一種棧安全檢測方法的一實施例的方法步驟示意圖。
[0020]圖4顯示為本發(fā)明的一種棧安全檢測方法的一實施例的方法步驟示意圖。
[0021]圖5顯示為本發(fā)明的一種棧安全檢測方法的一實施例的方法步驟示意圖。
[0022]圖6顯示為本發(fā)明的一種棧安全檢測系統(tǒng)的一實施例的模塊示意圖。
[0023]元件標(biāo)號說明
[0024]I棧安全檢測系統(tǒng)
[0025]11可執(zhí)行文件加載模塊
[0026]12函數(shù)調(diào)用分析模塊
[0027]SI ?S3 步驟
【具體實施方式】
[0028]以下通過特定的具體實例說明本發(fā)明的實施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的【具體實施方式】加以實施或應(yīng)用,本說明書中的各項細節(jié)也可以基于不同觀點與應(yīng)用,在沒有背離本發(fā)明的精神下進行各種修飾或改變。
[0029]需要說明的是,本實施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實際實施時的組件數(shù)目、形狀及尺寸繪制,其實際實施時各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
[0030]本發(fā)明提供一種棧安全檢測方法。在一個實施例中,如圖1所示,所述棧安全檢測方法包括:
[0031 ] 步驟SI,加載可執(zhí)行文件。在一個實施例中,所述可執(zhí)行文件為嵌入式系統(tǒng)中的映像文件。
[0032]步驟S2,以所述可執(zhí)行文件的入口函數(shù)為起點獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷是否存在函數(shù)環(huán)路調(diào)用。所述獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹的具體實現(xiàn)包括:以所述可執(zhí)行文件的入口函數(shù)為起點,通過反匯編分析方法遞歸獲取所述可執(zhí)行文件中的一個函數(shù)所調(diào)用的所有子函數(shù),以獲取函數(shù)調(diào)用樹。具體地,所述反匯編分析方法與所述可執(zhí)行文件的機器語言對應(yīng)。在一個實施例中,所述反匯編分析方法有多個,分別與不同的所述可執(zhí)行文件的機器語言一一對應(yīng),根據(jù)加載的可執(zhí)行文件的機器語言使用不同的反匯編分析方法。所述判斷是否存在函數(shù)環(huán)路調(diào)用的具體實現(xiàn)為:檢測函數(shù)調(diào)用樹中每一個函數(shù)所調(diào)用的子函數(shù)節(jié)點是否在所述可執(zhí)行文件入口函數(shù)到所述函數(shù)的運行路徑上出現(xiàn)過,如果有出現(xiàn)過則為存在函數(shù)環(huán)路調(diào)用。
[0033]步驟S3,當(dāng)所述可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。在一個實施例中,所述棧安全檢測方法在所述函數(shù)調(diào)用樹形成過程中,判斷是否存在函數(shù)環(huán)路調(diào)用,如果存在,則結(jié)束所述函數(shù)調(diào)用樹的獲取,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。
[0034]在一個實施例中,假定所述可執(zhí)行文件的源碼如圖2所示,所述可執(zhí)行文件的源碼為sample.C。在sample, c中各存在兩個函數(shù)調(diào)用環(huán)路,如下:一是直接遞歸調(diào)用:task_entry->f_l O ->f_l O ; 二是間接遞歸調(diào)用:task_entry->f_2 O->f_3 O->f_4 O->f_2 O。所述sample, c被編譯鏈接系統(tǒng)可加載映像文件vxWorks.gz中,task_entry是任務(wù)的入口函數(shù)。本方法加載映像文件vxWorks.gz并以任務(wù)入口函數(shù)(task_entry)為起點,對可加載映像文件(vxWorks.gz)的代碼段進行反匯編分析。分析后得到的結(jié)果如圖3所示,從圖3中可以看到,通過對vxWorks.gz文件代碼段的反匯編分析可以知道task_entry調(diào)用了子函數(shù)f_l、f_2、memcmp> memset。同樣的方法分別對f_l、f_2、memcmp> memset進行反匯編分析,同樣得到這些函數(shù)所調(diào)用的子函數(shù),最終得到如圖4所示的任務(wù)的函數(shù)調(diào)用樹。對圖4中的函數(shù)調(diào)用樹檢測每一個函數(shù)所調(diào)用的子函數(shù)節(jié)點是否在任務(wù)入口函數(shù)到此函數(shù)的運行路徑上出現(xiàn)過,如果有出現(xiàn)過則是存在遞歸調(diào)用,即存在函數(shù)環(huán)路調(diào)用。檢測結(jié)果如圖5所示,函數(shù)調(diào)用樹中存在兩個調(diào)用環(huán)路:一是函數(shù)調(diào)用路徑(task_entry->f_l->f_l),最后的函數(shù)節(jié)點(f_l)能在其上一層的調(diào)用路徑(taSk_entry->f_l)上找到,則認為存在調(diào)用環(huán)路(遞歸調(diào)用)。二是函數(shù)調(diào)用路徑(task_entry->f_2->f_3->f_4->f_2),最后的函數(shù)節(jié)點(f_2)能在其上一層的調(diào)用路徑(taSk_entry->f_2->f_3->f_4)上找到,則認為存在調(diào)用環(huán)路。這時就可以標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。
[0035]本發(fā)明還提供一種棧安全檢測系統(tǒng)。在一個實施例中,如圖6所示,所述棧安全檢測系統(tǒng)I包括可執(zhí)行文件加載模塊11和函數(shù)調(diào)用分析模塊12。其中:
[0036]可執(zhí)行文件加載模塊11用于加載待分析的可執(zhí)行文件。在一個實施例中,所述可執(zhí)行文件包括嵌入式系統(tǒng)中的映像文件。
[0037]函數(shù)調(diào)用分析模塊12與所述可執(zhí)行文件加載模塊11相連,用于以所述可執(zhí)行文件的入口函數(shù)為起點獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷所述函數(shù)調(diào)用樹中是否存在函數(shù)調(diào)用環(huán)路;當(dāng)所述可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。所述判斷是否存在函數(shù)環(huán)路調(diào)用的具體實現(xiàn)為:檢測函數(shù)調(diào)用樹中每一個函數(shù)所調(diào)用的子函數(shù)節(jié)點是否在所述可執(zhí)行文件入口函數(shù)到所述函數(shù)的運行路徑上出現(xiàn)過,如果有出現(xiàn)過則為存在函數(shù)環(huán)路調(diào)用。在一個實施例中,所述函數(shù)調(diào)用分析模塊12包括反匯編單元,所述反匯編單元用于獲取所述可執(zhí)行文件的一個函數(shù)所調(diào)用的所有子函數(shù);所述調(diào)用分析函數(shù)通過所述反匯編單元獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹。所述反匯編單元與所述可執(zhí)行文件的機器語言一一對應(yīng)。所述反匯編分析方法可以有多個,分別與不同的所述可執(zhí)行文件的機器語言一一對應(yīng),根據(jù)加載的可執(zhí)行文件的機器語言使用不同的反匯編分析方法。
[0038]在一個實施例中,在所述調(diào)用分析模塊12獲取所述函數(shù)調(diào)用樹的過程中,判斷是否存在函數(shù)環(huán)路調(diào)用,如果存在,則結(jié)束所述函數(shù)調(diào)用樹的獲取,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。
[0039]綜上所述,本發(fā)明一種棧安全檢測方法及系統(tǒng),具有以下有益效果:通過一種簡單且容易實現(xiàn)的技術(shù)方案,運用反匯編手段分析系統(tǒng)的可加載映像文件,檢測出任務(wù)中存在的環(huán)路調(diào)用點,為系統(tǒng)任務(wù)棧使用或者任務(wù)棧溢出問題的定位分析提供有效的數(shù)據(jù),可以加快相關(guān)問題的定位。所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點而具高度產(chǎn)業(yè)利用價值。
[0040]上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾或改變。因此,舉凡所屬【技術(shù)領(lǐng)域】中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。
【權(quán)利要求】
1.一種棧安全檢測方法,其特征在于,所述棧安全檢測方法包括: 加載可執(zhí)行文件; 以所述可執(zhí)行文件的入口函數(shù)為起點獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷是否存在函數(shù)環(huán)路調(diào)用; 當(dāng)所述可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。
2.根據(jù)權(quán)利要求1所述的棧安全檢測方法,其特征在于:所述獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹的具體實現(xiàn)包括:以所述可執(zhí)行文件的入口函數(shù)為起點,通過反匯編分析方法遞歸獲取所述可執(zhí)行文件中的一個函數(shù)所調(diào)用的所有子函數(shù),以獲取函數(shù)調(diào)用樹。
3.根據(jù)權(quán)利要求2所述的棧安全檢測方法,其特征在于:所述反匯編分析方法與所述可執(zhí)行文件的機器語言 對應(yīng)。
4.根據(jù)權(quán)利要求1所述的棧安全檢測方法,其特征在于:所述判斷是否存在函數(shù)環(huán)路調(diào)用的具體實現(xiàn)為:檢測所述函數(shù)調(diào)用樹中每一個函數(shù)所調(diào)用的子函數(shù)節(jié)點是否在所述可執(zhí)行文件入口函數(shù)到所述函數(shù)的運行路徑上出現(xiàn)過,如果有出現(xiàn)過則為存在函數(shù)環(huán)路調(diào)用。
5.根據(jù)權(quán)利要求1所述的棧安全檢測方法,其特征在于:所述可執(zhí)行文件包括嵌入式系統(tǒng)中的映像文件。
6.一種棧安全檢測系統(tǒng),其特征在于:所述棧安全檢測系統(tǒng)包括: 可執(zhí)行文件加載模塊,用于加載待分析的可執(zhí)行文件; 函數(shù)調(diào)用分析模塊,與所述可執(zhí)行文件加載模塊相連,用于以所述可執(zhí)行文件的入口函數(shù)為起點獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹,并判斷所述函數(shù)調(diào)用樹中是否存在函數(shù)調(diào)用環(huán)路;當(dāng)所述可執(zhí)行文件的函數(shù)調(diào)用樹中存在所述函數(shù)環(huán)路調(diào)用時,標(biāo)識所述可執(zhí)行文件存在函數(shù)環(huán)路調(diào)用。
7.根據(jù)權(quán)利要求6所述的棧安全檢測系統(tǒng),其特征在于:所述函數(shù)調(diào)用分析模塊包括反匯編單元,所述反匯編單元用于獲取所述可執(zhí)行文件的一個函數(shù)所調(diào)用的所有子函數(shù);所述調(diào)用分析函數(shù)通過所述反匯編單元獲取所述可執(zhí)行文件的函數(shù)調(diào)用樹。
8.根據(jù)權(quán)利要求7所述的棧安全檢測系統(tǒng),其特征在于:所述反匯編單元與所述可執(zhí)行文件的機器語言 對應(yīng)。
9.根據(jù)權(quán)利要求6所述的棧安全檢測系統(tǒng),其特征在于:所述判斷是否存在函數(shù)環(huán)路調(diào)用的具體實現(xiàn)為:檢測函數(shù)調(diào)用樹中每一個函數(shù)所調(diào)用的子函數(shù)節(jié)點是否在所述可執(zhí)行文件入口函數(shù)到所述函數(shù)的運行路徑上出現(xiàn)過,如果有出現(xiàn)過則為存在函數(shù)環(huán)路調(diào)用。
10.根據(jù)權(quán)利要求6所述的棧安全檢測系統(tǒng),其特征在于:所述可執(zhí)行文件包括嵌入式系統(tǒng)中的映像文件。
【文檔編號】G06F11/36GK104331370SQ201410696490
【公開日】2015年2月4日 申請日期:2014年11月26日 優(yōu)先權(quán)日:2014年11月26日
【發(fā)明者】李智榮 申請人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司