本發(fā)明涉及源碼分析領(lǐng)域,是一種利用文件依賴關(guān)系進(jìn)行源碼分析的方法,從而解決了在源碼分析中符號對象定位問題。
背景技術(shù):
源碼文件本質(zhì)上屬于文本,傳統(tǒng)的人工閱讀代碼效率低下,人們開始研究如何根據(jù)編譯過程中的中間文件來分析源碼,并將源碼的實現(xiàn)過程展現(xiàn)出來,從而快速理解編程者的思想,也給我們分析源代碼提供了便利。當(dāng)前對源碼內(nèi)容進(jìn)行分析的方式主要有兩種,分別是靜態(tài)分析方式、動態(tài)分析方式。
靜態(tài)分析是指在不執(zhí)行源碼程序的情況下,用詞法分析、語法分析等將源碼生成對應(yīng)的中間結(jié)構(gòu),對中間結(jié)構(gòu)的處理減少了無關(guān)信息的干擾,對于查詢結(jié)果準(zhǔn)確性有很大的幫助。通過靜態(tài)分析的方式對中間結(jié)構(gòu)進(jìn)行分析提取信息,已經(jīng)成為較為主流的分析方式。其中基于IR的定位技術(shù)使用基于潛在語義索引的搜索引擎,允許用戶通過寫自然語言查詢的命令提取源碼信息元素,如類、類型、函數(shù)、文件等。
對于用makefile組織的大型源碼進(jìn)行的分析,因為其文件組織關(guān)系記錄在makefile文件中,在分析過程中會出現(xiàn)因為依賴關(guān)系不明確而出現(xiàn)的對象定位錯誤的問題。這些錯誤導(dǎo)致分析人員對源碼的理解產(chǎn)生偏差,因此源碼分析過程中保證對象定位準(zhǔn)確性是重要的一環(huán)。
文件間依賴關(guān)系是指當(dāng)一個文件中需要引用其他文件中的函數(shù)、數(shù)據(jù)結(jié)構(gòu)或者變量等時,在引用之前需要包含其對應(yīng)的頭文件,即該文件的實現(xiàn)依賴于這些文件的實現(xiàn)。解決因為依賴關(guān)系不明確而產(chǎn)生的對象定位錯誤的主要策略是對查找文件范圍進(jìn)行明確。
在本系統(tǒng)中,我們提出了對文件依賴關(guān)系進(jìn)行利用的方法,即對makefile中記錄的信息進(jìn)行提取并處理,生成可供查找的結(jié)構(gòu)來確定對象定義查找的文件范圍,同時通過靜態(tài)分析對源碼文件內(nèi)容進(jìn)行提取并生成文件內(nèi)索引,在查找對象定義時,在文件查找范圍內(nèi)的文件索引中對對象定義進(jìn)行查找,提高查找的準(zhǔn)確性。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種基于makefile文件依賴的源碼分析方法,為分析源碼過程中對象定義的準(zhǔn)確定位提供解決方案。
技術(shù)方案:為解決上述問題,本發(fā)明的基于makefile文件依賴的源碼分析方法包括如下步驟:
1)依賴關(guān)系提取階段
a信息轉(zhuǎn)換;
b冗余信息處理;
c依賴信息提取;
d結(jié)束;
2)源碼信息提取階段
A解析源碼內(nèi)容;
b符號轉(zhuǎn)換;
c生成數(shù)據(jù)索引;
d結(jié)束;
3)結(jié)果確認(rèn)階段
a確認(rèn)查找的文件范圍;
b確認(rèn)定義位置;
c結(jié)束。
本發(fā)明中,步驟1)-a中所說的信息轉(zhuǎn)換是指用編譯器對makefile文件處理生成文件依賴關(guān)系的中間文件,對該文件進(jìn)行分析。
本發(fā)明中,步驟1)-b中處理冗余信息是指將中間文件中的與依賴關(guān)系無關(guān)的數(shù)據(jù)進(jìn)行判斷然后將無效信息剔除,提高系統(tǒng)內(nèi)存利用率和執(zhí)行速度。
本發(fā)明中,步驟1)-c中提取依賴信息是將中間文件中的依賴信息提取并生成可查詢的數(shù)據(jù)結(jié)構(gòu)。
本發(fā)明中,步驟2)-a中提取源碼信息是指通過對源碼內(nèi)容做靜態(tài)分析得到對應(yīng)的語法樹結(jié)構(gòu),從對應(yīng)語法樹結(jié)構(gòu)及其對應(yīng)的符號表中提取符號、屬性、類型和位置信息。
本發(fā)明中,步驟2)-b中符號轉(zhuǎn)換是指通過添加前綴和分隔符對符號信息進(jìn)行處理,排除不同作用域相同符號的定義的混淆性。
本發(fā)明中,步驟2)-c中生成數(shù)據(jù)映射建立索引是指將提取的信息建立數(shù)據(jù)映射,用來保存數(shù)據(jù)并建立一一映射關(guān)系,將符號位置利用字符串哈希函數(shù)生成唯一的數(shù)字ID建立位置和符號內(nèi)容的映射,將符號內(nèi)容作為唯一ID生成與符號相關(guān)信息的數(shù)據(jù)映射。
本發(fā)明中,步驟3)-a中確認(rèn)文件查找范圍是指根據(jù)查找文件信息從依賴關(guān)系結(jié)構(gòu)中獲取查找文件范圍。
本發(fā)明中,步驟3)-b中確認(rèn)符號查找信息結(jié)果是指在文件查找范圍內(nèi)對應(yīng)的文件數(shù)據(jù)索引中得到需要查找的符號信息。
本發(fā)明的有益效果是:本發(fā)明基于對源碼中的文件依賴關(guān)系進(jìn)行源碼分析,對符號對象定義查找時確定查找文件范圍,并通過靜態(tài)分析的方式對源碼內(nèi)容進(jìn)行提取將內(nèi)容索引化,保證了查找結(jié)果的有效性,通過對查找范圍的限定提升了源碼分析過程中對象定義定位的準(zhǔn)確性。
附圖說明
圖1為本發(fā)明的流程圖。
圖2為依賴關(guān)系提取階段的流程圖
圖3為對象定義查找階段的流程圖
具體實施方式
為了更了解本發(fā)明的技術(shù)內(nèi)容,特舉具體實施例并配合所附圖式說明如下。
圖1是本發(fā)明實施例的基于makefile文件依賴的源碼分析方法。
包括三個階段:依賴關(guān)系提取階段、源碼信息提取階段和對象定義查找階段。
步驟0為本發(fā)明的起始狀態(tài);
在依賴信息提取階段(步驟1-3),步驟1是信息轉(zhuǎn)換,將makefile通過處理生成便于處理其中信息的中間文件;
步驟2對中間文件中冗余的信息進(jìn)行判斷并剔除,提高系統(tǒng)內(nèi)存利用率。
步驟3對文件依賴關(guān)系信息提取,并轉(zhuǎn)化為可供查詢的數(shù)據(jù)結(jié)構(gòu),可以通過對象所在文件得到其所依賴的文件列表,確認(rèn)查找范圍;
在源碼信息提取階段(步驟4-6),步驟4對源碼內(nèi)容進(jìn)行靜態(tài)分析并將對應(yīng)的信息提取出來;
步驟5將步驟4中提取的符號進(jìn)行重命名,排除因為不同環(huán)境下同名造成的混淆;
步驟6通過對步驟4和步驟5中的信息將源碼數(shù)據(jù)生成數(shù)據(jù)索引,保證提供查找對象符號內(nèi)容可以得到所有相關(guān)的符號信息;
在結(jié)果確認(rèn)階段(步驟7-8),步驟7根據(jù)步驟3生成的結(jié)構(gòu)得到文件的依賴列表,從而確定查找的文件范圍;
步驟8在步驟7確定的文件范圍內(nèi)進(jìn)行文件內(nèi)查找,根據(jù)步驟6文件索引,將對象定位信息返回;
步驟9為結(jié)束步驟。
如圖2所示是對圖1中依賴關(guān)系提取階段的具體描述:
步驟10為開始步驟;
步驟11對makefile處理形成的中間文件內(nèi)容處理;
步驟12將中間文件中的五關(guān)信息去除,之后不再做處理;
步驟13對將無關(guān)信息去除的標(biāo)準(zhǔn)化的中間文件進(jìn)行處理;
步驟14判斷中間文件中的內(nèi)容是否處理完,如果處理完則執(zhí)行步驟20,否則執(zhí)行步驟15;
步驟15判斷讀取的信息是否為對文件依賴信息的描述,如果是則執(zhí)行步驟16,否則執(zhí)行步驟13;
步驟16將處理到的文件依賴信息提取并保存;
步驟17判斷依賴關(guān)系中目標(biāo)信息是否存在,如果不是則執(zhí)行步驟18,否則執(zhí)行步驟19;
步驟20為結(jié)束步驟;
圖3是對圖1中對象定義查找階段的具體描述:
步驟21為開始步驟;
步驟22查找操作,提供查找的符號信息,如符號內(nèi)容、符號所在文件位置等;
步驟23根據(jù)提供的符號所在文件獲得文件所依賴的文件列表;
步驟24對依賴文件列表中的文件進(jìn)行遍歷查找;
步驟25判斷依賴文件列表是否遍歷結(jié)束,如果是則執(zhí)行步驟28,否則執(zhí)行步驟26;
步驟26在對應(yīng)的文件索引中查找信息,首先根據(jù)位置信息確定索引表中對象符號內(nèi)容信息,然后根據(jù)符號內(nèi)容信息將與該對象相關(guān)的信息查找出來;
步驟27將步驟26中得到的信息進(jìn)行記錄列表;
步驟28對根據(jù)步驟27得到的相關(guān)對象信息列表進(jìn)行遍歷;
步驟29判斷是否為該符號對應(yīng)的定義信息,如果是則執(zhí)行步驟31,否則執(zhí)行步驟30;
步驟30繼續(xù)處理相關(guān)列表中的下一條信息;
步驟31將該結(jié)果返回;
步驟32為結(jié)束步驟。
綜上所述,本發(fā)明采用對makefile文件依賴關(guān)系進(jìn)行提取分析,并生成可供查詢的數(shù)據(jù)結(jié)構(gòu),當(dāng)對對象定義進(jìn)行查找時,首先確定文件查找范圍,然后在對應(yīng)的文件索引中查找對象信息,對對象定義位置進(jìn)行定位,通過對文件查找范圍確定和文件索引的利用,排除因為依賴關(guān)系不明造成的對象定義查找不準(zhǔn)確的現(xiàn)象,大大提高對象定義查找的準(zhǔn)確性。
本發(fā)明所屬技術(shù)領(lǐng)域中具有通常知識者,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作各種的更動與潤飾。因此,本發(fā)明的保護范圍當(dāng)視權(quán)利要求書所界定者為準(zhǔn)。