TWI484413B - 基於功能性的程式比較方法 - Google Patents
基於功能性的程式比較方法 Download PDFInfo
- Publication number
- TWI484413B TWI484413B TW101111895A TW101111895A TWI484413B TW I484413 B TWI484413 B TW I484413B TW 101111895 A TW101111895 A TW 101111895A TW 101111895 A TW101111895 A TW 101111895A TW I484413 B TWI484413 B TW I484413B
- Authority
- TW
- Taiwan
- Prior art keywords
- program
- fragment
- program fragment
- instruction set
- subroutine
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
Description
本發明係有關於一種基於功能性的程式比較方法,且特別是有關於一種能針對功能等效但二元(binary)內容相異的程式進行辨識的程式比較方法。
現代化的智慧型電子裝置,例如可攜式電腦、手機與各種消費者電子裝置等等,皆已配備處理器,其可執行軟體及/或韌體程式,以實現電子裝置的各種多樣化功能。程式可以方便地被修改、擴充或更新,藉此改良、增進或提昇電子裝置的功能。
軟體程式係透過編譯器(compiler)將以高階程式語言描述的原始碼(source code)編譯(compile)為目的檔(object file),並連結程式庫(library)將之轉換為可供處理器執行之執行檔(executable file)。一般而言,程式中包括有一或多個子程序(subroutine),各個子程序中包括一或多個指令(instruction),不同指令對應不同的指令功能。目的檔、執行檔中包括許多機器碼(machine code),使程式的各指令以二進位機器碼表示。電子裝置配置一定的儲存空間以將同一程式片段的機器碼依序連續存放;處理器則是由儲存空間中存取執行檔的機器碼,並加以執行,以實現電子裝置的種種功能。
由於現代電子裝置的功能繁雜,程式運作的邏輯脈絡也變得十分複雜;為了追蹤程式的修正、改版、升級、更新與測試,需要進行程式比較。
在現行習知技術中,一種進行程式比較的方法係直接比較兩程式的原始碼。不過,此種習知技術會受限於原始碼結構差異以及高階程式語言語法分析差異。再者,在許多應用中,原始碼也無法取得;舉例而言,若原始碼的撰寫者與執行檔的使用者/測試者為不同廠商,使用者/測試者就無法進行藉由原始碼來進行程式比較。
另一種習知的程式比較技術則是針對兩程式的目的檔或執行檔進行二元內容的比較;也就是說,在比較兩程式的執行檔時,此種習知技術係逐位元或逐位元組地比較兩目的檔或執行檔中的機器碼。然而,此種習知技術只能比較程式的二元內容,無法辨識兩程式是否在功能上相似或相當(等效)。在實務上,有許多狀況會使兩程式的功能等效但二元內容相異。舉例而言,即使是同一原始碼,若編譯器的最佳化設定改變,編譯出來的執行檔就會有內容的差異,雖然功能上是完全相當的。
再者,執行檔的程式區段(section)設定不同,也會使兩個等效執行檔具有不同的二元內容。舉例而言,若某一執行檔中係將複數個函數(function)安排至同一程式區段,另一執行檔將同樣的複數個函數分別安排於兩個程式區段,則此兩執行檔的二元內容就會有所差異,但功能上仍是相當的。
此外,若某一執行檔的函數有所修改,鄰近函數的機器碼也有可能會受到影響,使修改後執行檔的二元內容出現額外的差異;受此影響,習知程式比較技術便會誤認程式修改的幅度。
有一些指令經編譯後產生的機器碼相異,但邏輯上執行的結果是相同的;舉例而言,「mov a 0」(將數值0放入變數a)與「sub a a」(將變數a之值由變數a中減去)兩指令的形式不同,但結果是相同的。另外,在不同的編譯器中,無動作指令(no-operation,nop)可能被編譯為A=A。若兩程式中包含這些指令,即使兩程式的執行結果相同,基於二元內容比較的習知技術還是會將兩程式判斷為不同的程式。
針對習知技術的缺點,本發明提出一種基於功能性的程式比較技術,可針對兩個子程序(乃至於兩個程式)的目的檔或執行檔進行比較,以辨識這兩個子程序在功能上是否相當,無論其機器碼的二元內容是否相等。
本發明功能性的程式比較技術有許多優點,用途也十分廣泛。舉例而言,針對新版與舊版程式進行程式比較後,便可據以做出軟體升級包,以將舊版程式升級至新版程式。針對原始碼修改前後的程式進行比較,則可評估原始碼修改與結構的合理性。再者,若能以程式比較找出新舊程式的功能改變處,程式測試者就可以針對功能的改變進行標靶測試,以較少的時間達到較佳的測試涵蓋率。若原始碼的撰寫者與目的檔/執行檔的使用者/測試者為不同廠商,使用者/測試者可針對目的檔/執行檔進行新舊程式的比較,以找出程式邏輯的修改處,並推論原始碼的修改目的。在某些場合中,相同原始碼會因為與不同的程式庫連結而被編譯為不同的執行檔,使同一版本的程式出現不一致的程式行為(與功能);運用本發明程式比較技術,可為不一致的程式行為提出合理解釋,並追蹤其差異來源。
本發明的目的是提供一種程式比較方法,可用以比較一第一子程序與一第二子程序的功能性。此方法包括:設定複數個指令集合,各指令集合關聯於一對應的指令集合處理流程;將一第一指標與一第二指標設定為初始值(例如0),並將一第一跳躍指標與一第二跳躍指標的數值設定至一預設範圍中(例如是負值);進行一第一擷取流程,分別由該第一子程序以及該第二子程序中取得一第一程式片段以及一第二程式片段,並將該第一程式片段以及該第二程式片段分別歸類於該些指令集合的其中之一;進行一程式片段比較流程,依據第一程式片段被歸類的指令集合與第二程式片段被歸類的指令集合選擇一指令集合處理流程,比較第一程式片段與第二程式片段是否相當;若第一程式片段與第二程式片段係相當,則重複第一擷取流程以更新第一程式片段與第二程式片段;若第一程式片段與第二程式片段皆已為空,則判斷第一子程序與第二子程序係相當;若第一程式片段與第二程式片段不全為空,或第一程式片段與第二程式片段係不相當,則判斷第一子程序與第二子程序係不相當。
一實施例中,第一擷取流程包括:進行一機器碼擷取流程,其包括:若第一(第二)跳躍指標的數值在該預設範圍中,依據第一(第二)指標在第一(第二)子程序中取得一機器碼,並將第一(第二)指標更新,以指向第一(第二)子程序中的次一機器碼;若第一(第二)跳躍指標的數值不在該預設範圍中,依據第一(第二)跳躍指標在第一(第二)子程序中取得一機器碼,並將第一(第二)跳躍指標更新,以指向第一(第二)子程序中的次一機器碼;在機器碼擷取流程後,若於第一(第二)子程序中取得機器碼,則將取得的機器碼加入至第一(第二)程式片段中;若第一(第二)程序片段尚未能被歸類於任一指令集合,則重複機器碼擷取流程,並將取得的機器碼持續加入至第一(第二)程式片段中;若第一(第二)程序片段已符合該些指令集合的其中之一,則進行至程式片段比較流程。
一實施例中,該些指令集合可以包括(但不限於)無條件式跳躍(unconditional branch)指令集合、子程序回歸(return)指令集合、常數取得(constant load)指令集合、無動作(no-operation)指令集合、子程序呼叫(subroutine call)指令集合、條件式跳躍(conditional branch)指令集合與其他類指令集合等等;各指令集合關聯於一對應的指令集合處理流程。若第一程式片段與第二程式片段被歸類於同一指令集合,則於程式片段比較流程中依據該同一指令集合關聯的指令集合處理流程判斷第一程式片段與第二程式片段是否相同。
舉例而言,若第一程式片段與第二程式片段皆被歸類於子程序呼叫指令集合,程式片段比較流程中的對應指令集合處理流程可以包括:依據第一程式片段與第二程式片段呼叫的子程序名稱分別取得一第一呼叫子程序名稱與一第二呼叫子程序名稱;若第一呼叫子程序名稱與第二呼叫子程序名稱相異,判斷第一程式片段該第二程式片段係為不相當;若第一呼叫子程序名稱與第二呼叫子程序名稱相同,判斷第一程式片段與第二程式片段具有相同功能性(相當)。
一實施例中,若第一程式片段與第二程式片段皆被歸類於常數取得指令集合,且係針對執行檔進行比較,程式片段比較流程中的對應指令集合處理流程可以包括:依據第一程式片段與第二程式片段取得的常數數值分別取得一第一來源值與一第二來源值;依據第一來源值與第二來源值是否相等來判斷第一程式片段與第二程式片段是否相當。若係針對目的檔進行比較,則程式片段比較流程中的對應指令集合處理流程可以包括:依據第一程式片段與第二程式片段取得的常數符號(symbol)分別取得一第一來源符號與一第二來源符號;依據第一來源符號與第二來源符號是否相等來判斷第一程式片段與第二程式片段是否具有相同功能性。
若第一程式片段與第二程式片段皆被歸類於該其他類指令集合,程式片段比較流程中的對應指令集合處理流程可以包括:比較第一程式片段與第二程式片段的機器碼是否相同,以判斷第一程式片段與第二程式片段是否具有相同功能性。
若第一程式片段與第二程式片段皆被歸類於子程序回歸指令集合,程式片段比較流程中的對應指令集合處理流程可以包括:將第一跳躍指標與第二跳躍指標設定於該預設範圍中,並判斷第一程式片段與第二程式片段是否具有相同功能性。
若第一程式片段與第二程式片段未被歸類於同一指令集合,程式片段比較流程中可以包括:若第一(第二)程式片段被歸類於無條件式跳躍指令集合、第二(第一)程式片段未被歸類於無條件式跳躍指令集合,且第一跳躍指標與第二跳躍指標的數值均在該預設範圍中,則依據第一(第二)程式片段的無條件跳躍的目的更新第一(第二)跳躍指標,使第一(第二)跳躍指標的數值不再位於該預設範圍中;隨著第一跳躍指標被更新,亦使第二(第一)指標退回至被更新前的數值(即前次進行第一擷取流程前的數值);然後,重複第一擷取流程。
換言之,若第一程式片段與第二程式片段分別被歸類於不同指令集合,且第一(第二)程式片段被歸類於無條件式跳躍指令集合,則重複第一擷取流程,以依據第一(第二)程式片段的無條件跳躍的目的更新第一(第二)程式片段,並重複程式片段比較流程。
於本發明程式片段比較流程步驟中,係比較第一程式片段與第二程式片段於該指令集合處理流程的邏輯運作順序是否相同,以判斷第一程式片段與第二程式片段是否具有相同的功能性。
為了對本發明之上述及其他方面有更佳的瞭解,下文特舉較佳實施例,並配合所附圖式,作詳細說明如下。
本發明程式比較技術利用程式的目的檔或執行檔進行程式比較。程式的目的檔或執行檔是由各種機器碼組合而成,各機器碼佔用一單位(例如一個字元,word)的儲存空間;一個程式片段包含在儲存空間中依序連續存放的一或多個機器碼,用以實現某一種指令功能。舉例而言,某些指令只利用單一機器碼,此單一機器碼自行形成一個程式片段。相對地,某些指令(像是某種無條件式跳躍指令)則需使用兩個(或多個)連續存放的機器碼,而這兩個(或多個)機器碼即形成一個程式片段。
為實現本發明程式比較技術,可先依據指令功能定義複數個指令集合,各個指令集合關聯於一指令功能,且包含一個或多個程式片段;也就是將一或多個功能相同/相似的程式片段歸於同一指令集合中。舉例而言,本發明一實施例可以將程式中可能用到的所有指令依照功能而分別歸類為:無條件式跳躍指令集合、子程序回歸指令集合、常數取得指令集合、無動作指令集合、子程序呼叫指令集合、條件式跳躍指令集合與其他類指令集合;若有需要,也可以增設更多指令集合,或是將多個指令集合綜合至同一指令集合。
無條件式跳躍指令集合指當處理器執行此類程式片段後,處理器狀態(如暫存器數值等等)不受影響,但處理器不會執行存放在儲存空間中的次一程式片段,而會跳躍執行其他程式片段。舉例而言,若某一第一程式片段被執行後不影響處理器狀態,但會使處理器跳躍執行位置不連續的某一第二程式片段,則第一程式片段即可被歸類於無條件式跳躍指令集合。
對子程序呼叫指令集合而言,假設一第一程式片段被歸類於此指令集合,則當處理器執行此第一程式片段後,會先執行另一個位於某一指定位置的第二程式片段,也就是開始執行被呼叫的子程序;在一般正常狀況下,經過一段未定的執行時間後,處理器會執行第一程式片段後連續存放的次一程式片段,也就是從被呼叫的子程序中回歸。
對子程序回歸指令集合而言,當處理器執行此類程式片段後,接下來被執行的程式片段可以是未定的,其原因可以是(但不限於):接下來被執行的程式片段會依據一或多個處理器狀態而改變,而這一或多個處理器狀態可以是未知的。
對常數取得指令集合而言,當屬於此指令集合的程式片段被執行後,處理器會由儲存空間中取得一常數,該常數的數值不隨執行過程而改變。
對無動作指令集合而言,當此指令集合的程式片段被執行後,沒有值得納入考慮或任何的處理器狀態變化。
對條件式跳躍指令集合而言,當此類指令集合的程式片段被執行後,處理器會依據一或多個處理器狀態決定下一個被執行的程式片段,且可預先得知所有可能的下一個被執行程式片段。
最後,不屬於前述其他指令集合的程式片段皆被歸類為其他類指令集合。
一實施例中,針對目的檔進行程式比較時,程式的目的檔中會包括一子程序集合與一個位置符號對應表(或稱為重定位表,relocation table),此位置符號對應表的模式為重定位(relocatable)模式。子程序集合中包括有一或多個子程序,各個子程序有一子程序名稱,並包括一或多個會在儲存空間中被依序連續存放的程式片段(或機器碼)。位置符號對應表中則包括有一或多組的「位置與符號對」(pair),各個「位置與符號對」將一位置與一符號互相關聯對應;其中,各符號可以(但不限於)代表一個子程序的子程序名稱,位置則代表該子程序於儲存空間中的位址。位置可以(但不限於)是數字;在同一位置符號對應表中,同一符號可以重複出現在不同的「位置與符號對」中,但相同位置不會重複出現在不同的「位置與符號對」中。
配合執行檔的相關除錯資訊檔案(debug information file),本發明也可針對執行檔進行程式比較。執行檔中包括一子程序集合,子程序集合中包括一或多個子程序;對應的除錯資訊檔案中則至少包括一個「位置與子程序名稱對應表」,據此,可產生一相關於執行檔的位置符號對應表,其至少包括此「位置與子程序名稱對應表」,且此位置符號對應表的模式為固定(fixed)模式。
不論是目的檔或執行檔,只要配合其相關的位置符號對應表,即可由目的檔或執行檔中取得各個子程序。本發明程式比較技術即可用子程序為單位來進行;也就是說,本發明程式比較技術可比對出兩個子程序是否相當、在功能上是否等效。這兩個相互比對的子程序可以分別是兩不同程式中同名稱的子程序,也可以是同一程式中不同名稱的兩個子程序;或者,也可以分別是兩不同程式中不同名稱的子程序。
在比較兩子程序時,本發明程式比較技術會由兩子程序中分別取得兩程式片段,依據兩程式片段所屬的指令集合比對兩程式片段是否相當,即具有相同功能;依據子程序的運作邏輯依序比對兩子程序中的各個程式片段,據以判斷兩子程序是否相當。在本發明中,各指令集合皆關聯於一對應的指令集合處理流程。當要依據兩程式片段所屬的指令集合比較兩程式片段時,若兩程式片段屬於同一指令集合,便可依據該指令集合關聯對應的指令集合處理流程判斷該兩程式片段是否相當;相對地,若兩程式片段不屬於同一指令集合,則由另一專屬的處理流程判斷該兩程式片段是否相當,並控制其後續的程式片段比較。
請參考第1圖,其所示意的是依據本發明一實施例的流程100,其可實現本發明程式比較技術,用以比較一第一子程序與一第二子程序是否相當(為同一種類功能)。流程100的進行可說明如下。
步驟101:初始化。將一第一指標與一第二指標設為初始值(如數值0),將一第一跳躍指標與一第二跳躍指標的數值設定至一預設範圍中,例如說是使第一跳躍指標與第二跳躍指標的數值為負值。第一指標與第一跳躍指標係對應於第一子程序,第二指標與第二跳躍指標係對應於第二子程序。當第一跳躍指標或第二跳躍指標之數值落入該預設範圍內時,代表不需要進行一位置跳躍,而應以相對應之第一指標或第二指標所指之位置取得機器碼。反之,當第一跳躍指標或第二跳躍指標之數值未落入該預設範圍內時,代表需進行一位置跳躍,跳躍指標其數值即進行該位置跳躍時應取得機器碼之位置。
步驟110:依據第一指標與第一跳躍指標的其中之一從第一子程序中取得一程式片段,作為一第一程式片段。此步驟可視為一擷取流程,將以第2圖的流程800作進一步的說明。此步驟也會判斷出第一程式片段屬於哪一種指令集合。
步驟111:依據第二指標與第二跳躍指標的其中之一從第二子程序中取得一程式片段,作為一第二程式片段。此步驟同樣依據第2圖的流程800進行;因此,此步驟也會判斷出第二程式片段會被歸類於何種指令集合。
步驟120:自步驟110與111取得的第一程式片段與第二程式片段中,若其中之一為空(不包括任何機器碼),即可進行至步驟170,否則進行至步驟130。
步驟130:判斷第一程式片段與第二程式片段這兩個程式片段是否屬於同一指令集合,若判斷為是,則進行至步驟140。若兩程式片段不屬於同一指令集合,進行步驟150。
步驟140:依據第一、第二程式片段所屬的指令集合進行對應的指令集合處理流程,以進一步在步驟160中判斷第一、第二程式片段是否相當。舉例而言,子程序呼叫指令集合所對應的指令集合處理流程可依據第3圖的流程200進行,常數取得指令集合所對應的指令集合處理流程可依據第4圖流程300進行;子程序回歸指令集合所對應的指令集合處理流程可依據第5圖的流程400進行;其他所有指令所對應的指令集合處理流程則可依據第6圖流程500進行。
步驟150:接續於步驟130,若第一、第二程式片段分別被歸類於不同的指令集合,進行專屬的處理流程,其實施例將以第7圖的流程900作進一步說明。
步驟160:依據步驟140或150,可判斷第一、第二程式片段是否相當(即兩程式片段是否屬具有等同功能);若兩者相當,重複至步驟110與111,以分別取得第一子程序以及第二子程序下一個用以比較的程式片段;若兩者被判斷為不相當,則進行至步驟190。步驟130、140、150與160可視為一程式片段比較流程,用以依據第一、第二程式片段被歸類的指令集合比較兩程式片段是否相當。
步驟170:接續步驟120,判斷第一、第二程式片段是否皆為空,即不含任何機器碼。若第一、第二程式片段皆為空,則進行至步驟180,否則進行至步驟190。
步驟180:判斷第一子程序與第二子程序係相當(功能上為等效)。
步驟190:判斷第一子程序與第二子程序係不相當。
請參考第2圖,其所示意的是依據本發明一實施例的流程800;第1圖的步驟110與111可依據流程800來進行。流程800的進行可說明如下。
步驟801:開始流程800。
步驟805:初始化一程式片段,使此程式片段為空,不包括任何機器碼。
步驟810:若一跳躍指標落入一預設範圍,舉例而言,為負值,進行至步驟820,否則進行至步驟825。此跳躍指標即步驟110的第一跳躍指標或步驟111的第二跳躍指標。
步驟820:依據一指標指示的位置而在一子程序中取得一機器碼,並將該指標指向儲存空間中連續的次一位置。此處的指標與子程序即步驟110中的第一指標與第一子程序,或步驟111中的第二指標與第二子程序。
步驟825:依據一跳躍指標指示的位置而在該子程序中取得一機器碼,並將該跳躍指標指向儲存空間中連續的次一位置。此處的跳躍指標即步驟110中的第一跳躍指標或步驟111中的第二跳躍指標。
步驟830:在步驟820或825中,若該指標或該跳躍指標指向的位置已經沒有機器碼(例如說該指標/跳躍指標已指向該子程序的尾端之後)而未取得機器碼,便可進行至步驟890;反之,則進行至步驟840。步驟810、820、825與830可視為一機器碼擷取流程。
步驟840:將步驟820或825取得的機器碼加入至該程式片段中,並進行至步驟850。
步驟850:若該程式片段已經可以被歸類於某一指令集合,也就是該程式片段已構成一有意義的指令,便可進行至步驟890;反之,則重複步驟810。
步驟890:回傳該程式片段,完成流程800,也就是完成了第1圖中的步驟110或111,分別取得第一程式片段與第二程式片段,以繼續進行步驟120。
如前面描述過的,一程式片段可以包括多個機器碼;由步驟820(或825)至步驟830與840,每進行一次可將一機器碼加入至程式片段中,由步驟850遞迴至步驟810即可將更多的機器碼擷取至程式片段中。對於多個機器碼的程式片段而言,若程式片段中的機器碼數目不足,該程式片段就還無法被歸類於任何一個指令集合;因此,流程800會由步驟850重複至步驟810,直到程式片段已經收集到足夠的機器碼而可以順利被歸類於某一指令集合。然後,流程800便可結束,可繼續進行至流程100中的步驟120。
由流程800可知,步驟110、111不僅由第一、第二子程序中分別取得第一、第二程式片段,於步驟850亦可判斷出第一、第二程式片段所被歸類的指令集合。在流程800中,跳躍指標與子程序運作的邏輯有關,例如說是與子程序中的無條件式跳躍有關;跳躍指標之詳細運作會於第5圖流程400與第7圖的流程900中進一步說明。
請參考第3圖,其所示意的是依據本發明一實施例的流程200,用以在第1圖的步驟140中實現子程序呼叫指令集合所專屬的指令集合處理流程。流程200的進行可說明如下。
步驟201:在第1圖流程100中,若第一與第二程式片段皆屬於子程序呼叫指令集合(步驟130),便可在步驟140中開始進行流程200。
步驟210:若位置符號對應表的模式為固定模式,則進行至步驟220,反之則進行至步驟230。固定模式代表流程100係針對執行檔進行比較;若非固定模式,例如是重定位模式,則代表流程100係針對目的檔進行比較。
步驟220:若是針對執行檔進行比較,可由第一程式片段的機器碼與第二程式片段的機器碼分別計算出一第一呼叫位置與一第二呼叫位置。
步驟230:若針對目的檔進行比較,可用第一指標與第二指標的位置作為第一呼叫位置與第二呼叫位置。
步驟240:利用目的檔或執行檔對應的位置符號對應表或「位置與子程序名稱對應表」,可依據第一呼叫位置與第二呼叫位置分別取得一第一呼叫子程序名稱與一第二呼叫子程序名稱,代表第一程式片段與第二程式片段所呼叫的子程序名稱。
步驟250:若第一呼叫子程序名稱與第二呼叫子程序名稱相同,則進行至步驟260,反之則進行至步驟270。
步驟260:於步驟160(第1圖)中判斷第一程式片段與第二程式片段係相當,以繼續進行至流程100的步驟110與111。換言之,若第一程式片段與第二程式片段皆屬於子程序呼叫指令集合,且兩者皆呼叫同一名稱的子程序,即可判斷第一程式片段與第二程式片段係相當。
步驟270:於步驟160中判斷第一程式片段與第二程式片段係不相當,以繼續進行至步驟190。即使第一程式片段與第二程式片段皆屬於子程序呼叫指令集合,若兩者分別呼叫不同名稱的子程序,第一程式片段與第二程式片段就不相當。
在進行流程200時,第一程式片段可以是在第一程式中呼叫某一名稱的子程序,第二程式片段則可以是在第二程式中呼叫同一名稱的子程序。應特別說明的是,在第一程式中的該名稱子程序與第二程式中的同名稱子程序可能會是不相當的,但此不相當的關係會被反映在被呼叫子程序的比較,而不影響第一程式片段與第二程式片段是否相當之判斷。換言之,第一、第二程式中呼叫同名稱子程序的第一、第二程式片段應判斷為相當;等到要比較第一、第二程式中的該名稱被呼叫子程序時,自然會反映出第一、第二程式中的該名稱被呼叫子程序是否相當。
請參考第4圖,其所示意的是依據本發明一實施例的流程300,用以在第1圖的步驟140中實現常數取得指令集合處理流程。流程300的進行可描述如下。
步驟301:在第1圖流程100中,若第一與第二程式片段均被歸類於常數取得指令集合,便可於步驟140中開始進行流程300。
步驟310:若第一程式片段與第二程式片段取得常數的目的位置相同,即第一程式片段取得常數後所執行的機器碼與第二程式片段取得常數後所執行的機器碼相同,則進行至步驟320,反之則進行至步驟382。
步驟320:依據第一程式片段與第二程式片段分別計算出一第一來源位置與一第二來源位置,代表第一、第二程式片段取得常數的來源位置。
步驟330:若位置符號對應表的模式為固定模式,則進行至步驟340,反之則進行至步驟360。固定模式代表流程100係針對執行檔進行比較;若非固定模式,例如是重定位模式,則代表流程100係針對目的檔進行比較。
步驟340:依據第一、第二程式片段所對應的位置符號對應表以及第一、第二來源位置,可取得第一來源值與第二來源值,分別為第一程式片段與第二程式片段欲取得的常數數值。
步驟350:若步驟340中的第一來源值與第二來源值相同,進行至步驟380,反之則進行至步驟382。
步驟360:依據第一、第二程式片段所對應的位置符號對應表以及第一、第二來源位置,取得第一來源符號與第二來源符號,分別對應第一程式片段與第二程式片段所欲取得的常數的符號(名稱)。
步驟370:若步驟360的第一、第二來源符號兩者相同,進行至步驟380,反之則進行至步驟382。
步驟380:於步驟160(第1圖)中判斷第一程式片段與第二程式片段係相當,以繼續至步驟110。
步驟382:於步驟160中判斷第一程式片段與第二程式片段係不相當,以繼續至步驟190。
在流程300中,由步驟330至340,代表流程100係針對執行檔進行子程序的比較;由於執行檔與相關除錯資訊檔案會包括常數的數值,但可以不包括常數名稱(符號),故在針對執行檔進行流程300時,會由步驟330進行至步驟340與350,依據常數的數值是否相等來判斷第一、第二程式片段是否相當。相對地,目的檔會包括常數的符號(名稱),但可以不包括常數的數值,故在針對目的檔進行流程300時,會由步驟330進行至步驟360與370,依據常數的符號是否相等來判斷第一、第二程式片段是否相當。
請參考第5圖,其所示意的是依據本發明一實施例的流程400,用以在第1圖的步驟140中實現子程序回歸指令集合的指令集合處理流程。流程400的運作可描述如下。
步驟401:在第1圖流程100中,若第一與第二程式片段皆屬於子程序回歸指令集合,便可在步驟140中進行流程400。
步驟410:將第一跳躍指標與第二跳躍指標設定為負值。在將第一跳躍指標與第二跳躍指標設定為負值前,若第一跳躍指標不為負值,可將第一指標設定為第一跳躍指標之數值;同理,若第二跳躍指標不為負值,可將第二指標設定為第二跳躍指標之數值。
步驟420:於步驟160(第1圖)中判斷第一程式片段與第二程式片段係相當,以繼續至步驟110與111。
換言之,若第一與第二程式片段皆屬於子程序回歸指令集合,步驟410會將第一跳躍指標與第二跳躍指標回復至步驟101的初始值,並選擇性地將第一指標以及第二指標分別指向第一跳躍指標以及第二跳躍指標所指之數值。也就是說,流程400先驗地判斷第一與第二程式片段皆屬於子程序回歸指令集合時,第一與第二程式片段相當,而僅作為設定第一跳躍指標第二跳躍指標,以及選擇性地設定第一指標以及第二指標之用。
請參考第6圖,其所示意的是依據本發明一實施例的流程500,用以在第1圖的步驟140中實現其他類指令集合的指令集合處理流程。流程500的運作可描述如下。
步驟501:在第1圖流程100中,若第一與第二程式片段皆屬於其他類指令集合,便可在步驟140中進行流程500。
步驟510:若第一程式片段與第二程式片段的所有機器碼均相同,進行至步驟520,反之則進行至步驟530。
步驟520:於第1圖步驟160中判斷第一程式片段與第二程式片段係相當,以繼續至流程100的步驟110與111。
步驟530:於第1圖步驟160中判斷第一程式片段與第二程式片段係不相當,以繼續至步驟190。
亦即,當第一與第二程式片段皆屬於其他類指令集合時,流程500會直接比較兩者的機器碼是否相等,藉以判斷第一與第二程式片段是否相當。
請參考第7圖,其所示意的是依據本發明一實施例的流程900,用以在第1圖的步驟150中實現處理流程。流程500的運作可描述如下。
步驟901:若第一、第二程式片段分別被歸類於不同的指令集合,即可於流程100(第1圖)的步驟150中進行流程900。
步驟910:若第一跳躍指標與第二跳躍指標的其中任何之一不為負值,則進行至步驟960;反之,若第一跳躍指標與第二跳躍指標均為負值,則進行至步驟920。
步驟920:若第一程式片段屬於無條件式跳躍指令集合,則依據第一程式片段計算無條件跳躍的目的位置,並將第一跳躍指標更新為此目的位置;也就是說,若第一程式片段屬於無條件式跳躍指令集合,第一跳躍指標將不再是負值。再者,亦將第二指標退回至步驟111進行前的先前值。在第1圖流程100中,若由步驟150進行至流程900,代表步驟111已先進行過一次;在進行步驟111時,第二指標會被更新(第2圖步驟820)。而在步驟920中,就是要將第二指標的數值恢復至步驟111進行前的數值。
步驟930:若第二程式片段屬於無條件式跳躍指令集合,則依據第二程式片段計算跳躍的目的位置,並將第二跳躍值標更新為此目的位置,使第二跳躍指標不再是負值。再者,亦將第一指標退回至步驟110進行前的先前值。在流程100中,由步驟150進行至流程900,代表步驟110已先進行過一次;在進行步驟110時,第一指標會被更新(第2圖步驟820)。而在步驟930中,就是要將第一指標的數值恢復至步驟110進行前的數值。
步驟940:若第一跳躍指標與第二跳躍指標的其中任何一個不為負值,進行至步驟950,反之則進行至步驟960。
步驟950:於第1圖步驟160中判斷第一程式片段與第二程式片段係相當,以重複至步驟110。
步驟960:於步驟160中判斷第一程式片段與第二程式片段係不相當,以重複至步驟190。
當流程900進行至步驟910時,假設第一跳躍指標不為負值,代表流程900已進行過一次,第一程式片段是第一子程序中先前某一程式片段的跳躍目的。因此,若第一程式片段與第二程式片段不屬於同一指令集合,就可判斷第一程式片段與第二程式片段係為不相當,即步驟960。
當流程900由步驟910進行至步驟920與930時,假設第一程式片段被歸類於無條件式跳躍指令集合,第二程式片段不屬於無條件式跳躍指令集合,則第一跳躍指標會被設定為第一程式片段的跳躍目的,第二指標則被退回至步驟111進行前的數值。然後,流程900就會經由步驟940進行至步驟950,而第1圖流程100就會重複至步驟110與111。在依據第2圖流程800重複進行步驟110時,第一程式片段會因步驟825的進行而被更新為跳躍目的的程式片段。在依據流程800重複進行步驟111時,由於第二指標跟前次進行步驟111時相同,第二程式片段會與前一次進行步驟111時所取得的程式片段相同(步驟820)。當流程100由步驟110、111繼續進行至步驟130時,也就是要將第一程式片段中的跳躍目的程式片段與第二程式片段作比較。換言之,流程100將依據第一、第二子程序的邏輯運作順序(而非儲存空間中的位置順序)進行比較,忽略多出一無條件跳躍指令本身而以跳躍目的之程式片段進行比較;因應第一、第二子程序中屬於無條件跳躍指令集合的程式片段,步驟110、111中擷取程式片段的位置也會隨之跳躍。
請參考第8圖,其係舉例示意以流程100比較兩子程序A與A’的情形。在此例中,子程序A’中包括有連續排列的程式片段S1、S2、S3、S4與R,各程式片段的啟始位置分別為0、a1、a2、a3與a4。其中,程式片段R屬於子程序回歸指令集合,位於位置a4與a5之間。子程序A中則包括有程式片段S1、S2、UB、S3、S4與R,各程式片段的啟始位置分別為0、a1、a2、j2、j3與j4,程式片段UB之間還有其他的程式片段,位於位置j1與j2之間。其中,程式片段UB屬於無條件式跳躍指令集合,其跳躍的目的是位置j2。子程序A與A’皆包括了程式片段S1至S4;為方便說明,假設程式片段S1至S4皆不屬於無條件式跳躍指令集合。
當對子程序A與A’進行流程100時,假設子程序A為第一子程序,子程序A’為第二子程序。在步驟101後,流程100進行步驟110與步驟111;步驟110結束後,子程序A中的程式片段S1會被擷取為第一程式片段,第一指標指向的位置由位置0更新至位置a1,第一跳躍指標為負值。步驟111結束後,子程序A’中的程式片段S1會被擷取為第二程式片段,第二指標由位置0更新至位置a1,第二跳躍指標仍為負值。由於第一、第二程式片段相同,流程100會繼續進行步驟120、130、140與160,並重複至步驟110與111。
第二次進行步驟110時,流程100依據第一指標而由位置a1開始擷取機器碼;等步驟110結束後,子程序A中的程式片段S2會被擷取為第一程式片段,第一指標由位置a1更新至位置a2,第一跳躍指標維持為負值。同理,步驟111結束後,子程序A’中的程式片段S2會被擷取為第二程式片段,第二指標由位置a1更新至位置a2,第二跳躍指標仍為負值。由於第一、第二程式片段相同,流程100會再度經由步驟120、130、140與160而重複至步驟110與111。
第三次進行步驟110時,流程100依據第一指標而由位置a2開始擷取機器碼;等步驟110結束後,子程序A中的程式片段UB會被擷取為第一程式片段,第一指標由位置a2更新至位置j1,第一跳躍指標維持為負值。同理,步驟111進行時,會依據第二指標而由位置a2開始擷取機器碼;步驟111完成後,子程序A’中的程式片段S3會被擷取為第二程式片段,第二指標由位置a2更新至位置a3,第二跳躍指標仍為負值。由於第一程式片段與第二程式片段不屬於同一指令集合,流程100會經由步驟120與130進行至步驟150,以進行第9圖流程900。因為第一程式片段中的程式片段UB屬於無條件式跳躍指令,步驟920會使第一跳躍指標指向位置j2,不再是負值;而第二指標則會退回至位置a2,也就是第三次進行步驟111前的位置。流程900結束後,流程100由步驟160再度進行至步驟110與111。換言之,雖然第一程式片段中的程式片段UB不同於第二程式片段中的程式片段S3,但流程100會先假設兩者相當,以便重複至步驟110與111,依照子程序被執行的邏輯脈絡繼續比較。
第四次依據流程800進行步驟110時,流程800會在步驟825中依據第一跳躍指標而從位置j2開始擷取機器碼;步驟110結束後,子程序A中的程式片段S3被擷取為第一程式片段,第一跳躍指標則由位置j2更新為位置j3。進行步驟111時,流程100會依據第二指標而再度由位置a2擷取機器碼;步驟111完成後,第二指標由位置a2更新為位置a3,第二程式片段仍為程式片段S3,第二跳躍指標維持為負值。然後,由於第一程式片段與第二程式片段相等,流程100經由步驟120、130、140與160而再度遞迴至步驟110與111。
第五次進行步驟110,會依據第一跳躍指標而從位置j3開始擷取機器碼;步驟110完成後,子程序A中的程式片段S4被擷取為第一程式片段,第一跳躍指標則由位置j3更新為位置j4。第五次進行步驟111時,則會依據第二指標而從位置a3開始取得機器碼;步驟111完成後,第二指標由位置a3更新為位置a4,程式片段S4被擷取為第二程式片段,第二跳躍指標維持為負值。因為第一程式片段與第二程式片段相等(均為程式片段S4),流程100再一次經由步驟120、130、140與160而遞迴至步驟110與111。
依據第一跳躍指標,在第六次進行步驟110時,會從位置j4開始擷取機器碼;步驟110完成後,子程序A中的程式片段R被擷取為第一程式片段,第一跳躍指標由位置j4更新為位置j5。第六次進行步驟114時,則會依據第二指標而從位置a4開始取得機器碼;步驟111完成後,第二指標由位置a4更新為位置a5,子程序A’中的程式片段R被擷取為第二程式片段,第二跳躍指標維持為負值。因為第一程式片段與第二程式片段相等,均屬於子程序回歸指令集合,故流程100會經由步驟120與步驟130進行至步驟140,在步驟140中進行第5圖流程400,使第一、第二跳躍指標均恢復為負值。流程400完成後,會經由步驟160繼續至步驟110與111。不過,步驟110與步驟111均無法再擷取到機器碼,故第一、第二程式片段均為空,而流程100就會經由步驟120、170而進行至步驟180,判斷子程序A與A’為相當。
在進行流程100的步驟110與111後,若第一、第二程式片段有一為空而另一不為空,代表第一子程序與第二子程序在邏輯脈絡上會分別使用不同數目個程式片段,故流程100會由步驟170進行至步驟190,判斷兩子程序係不相當。
如第8圖所示,其實子程序A與A’的二元內容是不相同的。不過,就子程序運作的邏輯順序而言,當子程序A與A’被執行時,兩者皆依序執行程序片段S1、S2、S3、S4與R。因此,子程序A與A’的運作結果是相同的,兩者在功能上應屬等效;對應地,本發明流程100也正確地判斷出兩者係為相當。由以上討論可瞭解,本發明流程100的程式比較技術可確實地辨識出兩個功能上相當的子程序,不論這兩個子程序的機器碼二元內容是否相同。由於流程100的比較是依據邏輯脈絡進行的,在子程序A中位於位置j1與j2間的程式片段不需被比較。
若要比對一第一程式與一第二程式是否相當,可經由適當的安排以自動地將第一程式與第二程式中的同名稱子程序分別擷取為第一子程序與第二子程序,並針對第一子程序與第二子程序進行流程100。若第一程式與第二程式的具有相同數目的子程序,第一程式中的每一子程序在第二程式中均有同名稱的對應子程序,且第一程式與第二程式中的同名稱子程序均被流程100判斷為相當,則可判斷第一程式與第二程式係相當。
總結來說,相較於習知的程式比較技術,本發明程式比較技術可針對程式的功能性進行比較,不需原始碼,也不受限於機器碼的二元內容是否相等。因此,本發明可衍生出習知技術所無法實現的應用,諸如:評估原始碼修改與結構的合理性、標定新舊程式的功能改變處以精簡程式測試過程及/或製作軟體升級包、找出程式邏輯的修改處、為行為不同的兩程式找出差異的根源,等等。本發明的程式比較技術可用軟體來實現。
綜上所述,雖然本發明已以較佳實施例揭露如上,然其並非用以限定本發明。本發明所屬技術領域中具有通常知識者,在不脫離本發明之精神和範圍內,當可作各種之更動與潤飾。因此,本發明之保護範圍當視後附之申請專利範圍所界定者為準。
100、200、300、400、500、800、900...流程
101-190、801-890、201-270、301-382、401-420、501-530、901-960...步驟
a1-a5、j1-j5...位置
S1-S4、R、UB...程序片段
A、A’...子程序
第1圖示意的是依據本發明一實施例的流程圖。
第2圖示意的是依據本發明一實施例而於第1圖流程中取得程式片段的流程。
第3圖示意的是依據本發明一實施例的子程序呼叫指令集合處理流程。
第4圖示意的是依據本發明一實施例的常數取得指令集合處理流程。
第5圖示意的是依據本發明一實施例的子程序回歸指令集合處理流程。
第6圖示意的是依據本發明一實施例的其他類指令集合處理流程。
第7圖示意的是依據本發明一實施例而為不同指令集合的程式片段進行處理的流程。
第8圖用以舉例說明第1圖流程的進行。
100...流程
101-190...步驟
Claims (13)
- 一種程式比較方法,比較一第一子程序與一第二子程序的功能性,該方法包含:設定複數個指令集合,各該指令集合關聯於一對應的指令集合處理流程;進行一第一擷取流程,分別由該第一子程序以及該第二子程序中取得一第一程式片段以及一第二程式片段,並將該第一程式片段以及該第二程式片段分別歸類於該些指令集合的其中之一;以及進行一程式片段比較流程,依據該第一程式片段被歸類的該指令集合與該第二程式片段被歸類的該指令集合選擇並進行該些指令集合處理流程之一,以比較該第一程式片段與該第二程式片段是否具有相同的功能性。
- 如申請專利範圍第1項所述的程式比較方法,其中,該程式片段比較流程包含:若該第一程式片段與該第二程式片段被歸類於同一指令集合,依據該同一指令集合關聯的該指令集合處理流程判斷該第一程式片段與該第二程式片段是否具有相同的功能性。
- 如申請專利範圍第1項所述的程式比較方法,其中,該些指令集合中包含一無條件式跳躍指令集合,而該程式片段比較流程包含:若該第一程式片段與該第二程式片段分別被歸類於該些指令集合中的不同指令集合,且該第一程式片段被歸類於該無條件式跳躍指令集合,則依據該第一程式片段的無條件跳躍的一目的位置更新該第一程式片段,並重複該程式片段比較流程。
- 如申請專利範圍第1項所述的程式比較方法,其中,該些指令集合中包含一子程序呼叫指令集合,而該程式片段比較流程包含:若該第一程式片段與該第二程式片段皆被歸類於該子程序呼叫指令集合,則依據該第一程式片段與該第二程式片段呼叫的子程序名稱分別取得一第一呼叫子程序名稱與一第二呼叫子程序名稱;若該第一呼叫子程序名稱與該第二呼叫子程序名稱相異,判斷該第一程式片段與該第二程式片段不相當;以及若該第一呼叫子程序名稱與該第二呼叫子程序名稱相同,判斷該第一程式片段與該第二程式片段具有相同的功能性。
- 如申請專利範圍第1項所述的程式比較方法,其中,該些指令集合中包含一常數取得指令集合,而該程式片段比較流程包含:若該第一程式片段與該第二程式片段皆被歸類於該常數取得指令集合,則依據該第一程式片段與該第二程式片段欲取得的常數數值分別取得一第一來源值與一第二來源值;以及依據該第一來源值與該第二來源值是否相等來判斷該第一程式片段與該第二程式片段是否具有相同的功能性。
- 如申請專利範圍第1項所述的程式比較方法,其中,該些指令集合中包含一常數取得指令集合,而該程式片段比較流程包含:若該第一程式片段與該第二程式片段皆被歸類於該常數取得指令集合,依據該第一程式片段與該第二程式片段取得的常數符號分別取得一第一來源符號與一第二來源符號;以及依據該第一來源符號與該第二來源符號是否相等來判斷該第一程式片段與該第二程式片段是否具有相同的功能性。
- 如申請專利範圍第1項所述的程式比較方法,其中,該些指令集合中包含一其他類指令集合,而該程式片段比較流程包含:若該第一程式片段與該第二程式片段皆被歸類於該其他類指令集合,則比較該第一程式片段與該第二程式片段的機器碼是否相同,以判斷該第一程式片段與該第二程式片段是否具有相同的功能性。
- 如申請專利範圍第1項所述的程式比較方法,更包含:將一第一跳躍指標的數值設定至一預設範圍中;其中,該第一擷取流程包含:進行一機器碼擷取流程,包含:若該第一跳躍指標的數值在該預設範圍中,依據一第一指標在該第一子程序中取得一機器碼,並將該第一指標更新,以指向該第一子程序中的次一機器碼;若該第一跳躍指標的數值不在該預設範圍中,依據該第一跳躍指標在該第一子程序中取得一機器碼,並將該第一跳躍指標更新,以指向該第一子程序中的次一機器碼;於該第一子程序中取得該機器碼後,將該機器碼加入至該第一程式片段中;以及若該第一程序片段尚未能被歸類於該些指令集合的其中任何之一,則重複該機器碼擷取流程。
- 如申請專利範圍第8項所述的程式比較方法,其中,該些指令集合中包含一無條件式跳躍指令集合,而該程式片段比較流程包含:若該第一程式片段被歸類於該無條件式跳躍指令集合,該第二程式片段未被歸類於該無條件式跳躍指令集合,且該第一跳躍指標的數值在該預設範圍中,則依據該第一程式片段的無條件跳躍的目的位置更新該第一跳躍指標,使該第一跳躍指標的數值不再位於該預設範圍中;以及重複該第一擷取流程。
- 如申請專利範圍第9項所述的程式比較方法,其中,該程式片段比較流程更包含:若該第一程式片段被歸類於該無條件式跳躍指令集合,該第二程式片段未被歸類於該無條件式跳躍指令集合,且該第一跳躍指標已被更新,則使該第二指標退回至更新前的數值。
- 如申請專利範圍第8項所述的程式比較方法,其中,該些指令集合中更包含一子程序回歸指令集合,而該程序片段比較流程包含:若該第一程式片段與該第二程式片段皆被歸類於該子程序回歸指令集合,則將該第一跳躍指標設定於該預設範圍中,並判斷該第一程式片段與該第二程式片段具有相同的功能性。
- 如申請專利範圍第1項所述的程式比較方法,更包含:若該第一程式片段與該第二程式片段係相當,則重複該第一擷取流程以更新該第一程式片段與該第二程式片段;若該第一程式片段與該第二程式片段皆為空,判斷該第一子程序與該第二子程序具有相同的功能性;若該第一程式片段與該第二程式片段不全為空,或該第一程式片段與該第二程式片段係不相當,則判斷該第一子程序與該第二子程序係不相當。
- 如申請專利範圍第1項所述的程式比較方法,其中,該程式片段比較流程步驟中,係比較該第一程式片段與該第二程式片段於該指令集合處理流程的邏輯運作順序是否相同,以判斷該第一程式片段與該第二程式片段是否具有相同的功能性。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW101111895A TWI484413B (zh) | 2012-04-03 | 2012-04-03 | 基於功能性的程式比較方法 |
US13/747,968 US9063723B2 (en) | 2012-04-03 | 2013-01-23 | Function-based software comparison method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW101111895A TWI484413B (zh) | 2012-04-03 | 2012-04-03 | 基於功能性的程式比較方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201342239A TW201342239A (zh) | 2013-10-16 |
TWI484413B true TWI484413B (zh) | 2015-05-11 |
Family
ID=49236684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW101111895A TWI484413B (zh) | 2012-04-03 | 2012-04-03 | 基於功能性的程式比較方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9063723B2 (zh) |
TW (1) | TWI484413B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI590095B (zh) * | 2016-05-19 | 2017-07-01 | 緯創資通股份有限公司 | 軟體功能驗證系統及其驗證方法 |
GB2563580B (en) * | 2017-06-15 | 2019-09-25 | Advanced Risc Mach Ltd | An apparatus and method for controlling a change in instruction set |
DE102019134353A1 (de) * | 2019-12-13 | 2021-06-17 | Beckhoff Automation Gmbh | Verfahren zur Datenmigration eines Zeigerelements im Zuge einer Datenmigration eines Programmzustands eines Steuerprogramms eines Automatisierungssystems |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200813832A (en) * | 2006-09-08 | 2008-03-16 | Via Tech Inc | A method for updating computer programs, and a system thereof |
US7503035B2 (en) * | 2003-11-25 | 2009-03-10 | Software Analysis And Forensic Engineering Corp. | Software tool for detecting plagiarism in computer source code |
TW200917089A (en) * | 2007-10-02 | 2009-04-16 | Iti Scotland Ltd | Anti-tampering method and system thereof and integrity checking method |
CN101425078A (zh) * | 2008-11-17 | 2009-05-06 | 阿里巴巴集团控股有限公司 | 一种软件源代码的更新方法及装置 |
CN101520737A (zh) * | 2008-02-27 | 2009-09-02 | 三星电子株式会社 | 编译方法和使用该编译方法的处理器 |
CN101894236A (zh) * | 2010-07-28 | 2010-11-24 | 北京华夏信安科技有限公司 | 基于摘要语法树和语义匹配的软件同源性检测方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3711863A (en) * | 1972-01-21 | 1973-01-16 | Honeywell Inf Systems | Source code comparator computer program |
US6594822B1 (en) | 1999-02-19 | 2003-07-15 | Nortel Networks Limited | Method and apparatus for creating a software patch by comparing object files |
US6954747B1 (en) * | 2000-11-14 | 2005-10-11 | Microsoft Corporation | Methods for comparing versions of a program |
US20050222968A1 (en) * | 2004-04-06 | 2005-10-06 | International Business Machines Corporation | System, method and program product for identifying differences between sets of program container files |
US20060041873A1 (en) * | 2004-08-19 | 2006-02-23 | Cisco Technology, Inc. | Computer system and method for verifying functional equivalence |
US20090260000A1 (en) * | 2008-04-14 | 2009-10-15 | Sun Microsystems, Inc. | Method, apparatus, and manufacture for software difference comparison |
-
2012
- 2012-04-03 TW TW101111895A patent/TWI484413B/zh not_active IP Right Cessation
-
2013
- 2013-01-23 US US13/747,968 patent/US9063723B2/en not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7503035B2 (en) * | 2003-11-25 | 2009-03-10 | Software Analysis And Forensic Engineering Corp. | Software tool for detecting plagiarism in computer source code |
TW200813832A (en) * | 2006-09-08 | 2008-03-16 | Via Tech Inc | A method for updating computer programs, and a system thereof |
TW200917089A (en) * | 2007-10-02 | 2009-04-16 | Iti Scotland Ltd | Anti-tampering method and system thereof and integrity checking method |
CN101520737A (zh) * | 2008-02-27 | 2009-09-02 | 三星电子株式会社 | 编译方法和使用该编译方法的处理器 |
CN101425078A (zh) * | 2008-11-17 | 2009-05-06 | 阿里巴巴集团控股有限公司 | 一种软件源代码的更新方法及装置 |
CN101894236A (zh) * | 2010-07-28 | 2010-11-24 | 北京华夏信安科技有限公司 | 基于摘要语法树和语义匹配的软件同源性检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20130262843A1 (en) | 2013-10-03 |
US9063723B2 (en) | 2015-06-23 |
TW201342239A (zh) | 2013-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107608677B (zh) | 一种编译处理方法、装置及电子设备 | |
JP6287549B2 (ja) | ソースコードをポーティングする方法及び装置 | |
Sridharan et al. | Thin slicing | |
Bansal et al. | Automatic generation of peephole superoptimizers | |
US10509693B2 (en) | Method for identifying a cause for a failure of a test | |
US7100152B1 (en) | Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof | |
US5854924A (en) | Static debugging tool and method | |
US10229031B2 (en) | Debugging inline functions in optimized code | |
CN106371940A (zh) | 一种程序崩溃解决方法及装置 | |
JP6911059B2 (ja) | Cpu利用およびコードリファクタリングのためのクエリオプティマイザー | |
CN107643893B (zh) | 一种程序检测方法及装置 | |
WO2016091071A1 (zh) | 加载Linux内核驱动的方法及装置 | |
JP6303749B2 (ja) | ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体 | |
TWI484413B (zh) | 基於功能性的程式比較方法 | |
KR20180010053A (ko) | 보안 취약점 점검을 위한 위험성 코드 검출 시스템 및 그 방법 | |
KR20140050323A (ko) | 라이선스 검증 방법 및 그 장치 | |
CN112882718A (zh) | 编译处理方法、装置、设备及存储介质 | |
Malík et al. | Automatically checking semantic equivalence between versions of large-scale C projects | |
De Goër et al. | Now you see me: Real-time dynamic function call detection | |
Paydar et al. | An experimental study on flakiness and fragility of randoop regression test suites | |
CN112433706A (zh) | 编译选项调优方法、装置、处理器芯片及服务器 | |
JP4763743B2 (ja) | プログラム動作比較装置及び方法及びプログラム | |
CN111796832B (zh) | 热补丁文件生成方法、装置、设备及存储介质 | |
US20060064681A1 (en) | Method and system for verifying makefile accuracy | |
CN110399156B (zh) | 面向航天软件的在轨升级方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees | ||
MM4A | Annulment or lapse of patent due to non-payment of fees |