国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法

      文檔序號:6536287閱讀:220來源:國知局
      單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法
      【專利摘要】本發(fā)明公布了一種單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法,包括單片機內(nèi)的匯編指令,其特征在于:單片機內(nèi)的匯編指令實現(xiàn)數(shù)據(jù)與代碼段的分離,并且將程序分段表示為子程序及跳轉(zhuǎn)程序,子程序及跳轉(zhuǎn)程序有各自對應(yīng)的標號,并且每句程序有相應(yīng)的注釋,同時,單片機內(nèi)的匯編指令直接導(dǎo)入到對應(yīng)型號的開發(fā)環(huán)境中進行編譯調(diào)試,可以保證反編譯出的匯編程序可以直接在原開發(fā)環(huán)境中正確的編譯通過。本發(fā)明集成了多種系列的單片機反匯編功能,用戶可自行選擇對應(yīng)的單片機,然后導(dǎo)入格式文件,系統(tǒng)會自動反編譯出對應(yīng)匯編文件。
      【專利說明】單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明屬于單片機反匯編工具,具體說涉及一種單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法。
      【背景技術(shù)】
      [0002]在單片機應(yīng)用設(shè)計工作或?qū)W習(xí)時,有時可能會因為意外事故或工作交接等原因丟失原設(shè)計匯編或C代碼。但后期產(chǎn)品可能因市場需求,功能需要改進和升級,如何通過已固化在單片機中的二進制文件反向獲取正確可讀性的利于分析性的匯編文件或C文件成為這樣情況的難題。
      [0003]現(xiàn)有的獲取方式,基本上都是利用對應(yīng)單品機的開發(fā)環(huán)境進行簡單的翻譯成匯編指令,但代碼跟數(shù)據(jù)混在一起,不易讀懂程序,同樣也要浪費大量的時間和精力,大大增加開發(fā)修改成本。

      【發(fā)明內(nèi)容】

      [0004]為解決【背景技術(shù)】中的問題,本發(fā)明提供了一種用戶可自行選擇對應(yīng)的單片機,然后導(dǎo)入格式文件,系統(tǒng)會自動反編譯出對應(yīng)匯編文件的單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法。
      [0005]本發(fā)明的技術(shù)方案是:
      [0006]一種單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法,包括單片機內(nèi)的匯編指令,其特征在于:單片機內(nèi)的匯編指令實現(xiàn)數(shù)據(jù)與代碼段的分離,并且將程序分段表示為子程序及跳轉(zhuǎn)程序,子程序及跳轉(zhuǎn)程序有各自對應(yīng)的標號,并且每句程序有相應(yīng)的注釋,同時,單片機內(nèi)的匯編指令直接導(dǎo)入到對應(yīng)型號的開發(fā)環(huán)境中進行編譯調(diào)試,可以保證反編譯出的匯編程序可以直接在原開發(fā)環(huán)境中正確的編譯通過。
      [0007]作為進一步的技術(shù)方案,單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法的系統(tǒng)工作步驟如下:
      [0008]I)、打開要反匯編的源文件,工具會讀取這些文件的內(nèi)容,并轉(zhuǎn)換成可視的十六進制字符串的;
      [0009]2)、工具會將選擇的芯片型號作為一個全局變量進行保存,在反翻譯和追蹤的過程中都會選擇與該芯片型號對應(yīng)的指令信息數(shù)據(jù)表、相關(guān)的處理函數(shù)、方法、對象;
      [0010]3)、根據(jù)選擇的芯片型號調(diào)取其指令執(zhí)行的位數(shù)信息,將第一步中讀取的文件數(shù)據(jù)按照這個單位進行截取,生成一個原數(shù)據(jù)的數(shù)組;
      [0011]4)、反翻譯的過程,反翻譯的過程就是按照對應(yīng)表,將機器碼反向翻譯成助記符,從而幫助開發(fā)者重新看懂程序,獲取算法,進而改善或修改程序;
      [0012]所述對應(yīng)表是正常翻譯指令的過程是將對應(yīng)指令的助記符翻譯成該指令唯一對應(yīng)的機器碼,在這其中必須要有一個相配合的對應(yīng)表;
      [0013]所述翻譯是獲取各種系列芯片的機器碼表和對應(yīng)的指令格式,然后依據(jù)此指令的機器碼格式獲取了這整個芯片系列的所有指令碼基礎(chǔ)數(shù)據(jù)表,同時,此指令中包含有指令掩碼,指令掩碼負責(zé)過濾出指令操作碼部分數(shù)據(jù),而后的操作碼則與過濾出的指令操作碼數(shù)據(jù)部分比較,如果一致則說明當(dāng)前數(shù)據(jù)是本條指令,確定為那一條指令后再利用掩碼篩選出對應(yīng)的原操作數(shù),目的操作數(shù)或其他特殊的得數(shù)據(jù),篩選出對應(yīng)的數(shù)據(jù)后則分別取替換對應(yīng)當(dāng)前指令的指令格式中的對應(yīng)的字符,這樣這一條指令就被識別并反成匯編語言;
      [0014]而翻譯出所有的指令就是要建立一個原數(shù)據(jù)數(shù)組的索引,索引從零開始,以依次加一的方式來遍歷原數(shù)據(jù)數(shù)組成員,按照上述操作步驟將每一個數(shù)組成員反應(yīng)成對應(yīng)的指令,如果該數(shù)組成員的數(shù)據(jù)不符合任何一條指令的機器碼格式則說明此數(shù)組成員數(shù)據(jù)是匯編語言中定義的數(shù)據(jù),最后也要將其定義成匯編語言的數(shù)據(jù)格式,將翻譯的結(jié)果不管是指令還是數(shù)據(jù)都保存到一個對應(yīng)數(shù)目的新的指令數(shù)組里面,在下面的步驟5中的指令追蹤,分離數(shù)據(jù)段和程序段,添加跳轉(zhuǎn)標號,給程序分段各種操作中就以此數(shù)組數(shù)據(jù)為依據(jù)進行;
      [0015]5)、追蹤指令過程:是利用軟件模擬單片機正常的執(zhí)行流程,但不同的是這里只要認為單片機能夠能執(zhí)行的地方全都要追蹤過去,這樣做的目的就是為了實現(xiàn)指令與數(shù)據(jù)段的分離,同時在追蹤的過程中可以將跳轉(zhuǎn)語句和子程序調(diào)用語句標示出來,從而實現(xiàn)指令的分段;
      [0016]6)、利用多文檔程序結(jié)構(gòu)顯示反匯編結(jié)構(gòu),并按照功能按鈕的控制進行顯示或者導(dǎo)出。
      [0017]作為進一步的技術(shù)方案,步驟5)中追蹤指令過程如下:首先要建立四個大小可以根據(jù)數(shù)據(jù)自動調(diào)整的字符串集合,分別是訪問過的指令集合A,子程序調(diào)用或中斷處理程序調(diào)用時保存其斷點的集合B,保存其分支判斷語句的另一條指令的集合C和訪問過的跳轉(zhuǎn)標號集合D ;然后開始追蹤,程序?qū)凑罩付ǖ娜肟诘刂?,去訪問已經(jīng)翻譯好的指令數(shù)組,其數(shù)組的下標其實也就是該條指令的對應(yīng)的地址,第一步判斷該地址是否是已經(jīng)被訪問過或者超越最大地址或者是中斷或子程序返回語句,如果不是,則把改指令加入集合A中,進而判斷該語句是否是分支跳轉(zhuǎn)語句,如果是則保存該分支跳轉(zhuǎn)語句的另一條分支地址到集合B中,目的是當(dāng)一條分支走完后,在重新走另一條分支;如果不是分支跳轉(zhuǎn)語句,則判斷是否是子程序調(diào)用或者是直接跳轉(zhuǎn)語句,如果是子程序調(diào)用則先要保存一下該子程序調(diào)用完要返回的地址到集合C中,否則是直接跳轉(zhuǎn)語句則按照其跳轉(zhuǎn)的地址直接跳轉(zhuǎn);如果上述指令都不是,則是普通的運算類或邏輯類指令,將指令地址加I后重新重新調(diào)用該函數(shù),進行進行下一條指令的追蹤;到這里返回到開始如第一步判斷為假的話,那么繼續(xù)判斷該指令是否是子程序或中斷返回;如果是的話則同樣將該指令加入到集合A中,否則,判斷集合C中是否為空,不為空的話拿出最后一條指令,去追蹤并將該條指令從集合中刪除,直到該指令集合為空的時候以同樣分方式再去拿集B合中的指令去跟蹤,按照此流程直到把所有的指令跟蹤完后,沒有在已訪問過的指令集合中的則肯定是數(shù)據(jù)段了,而對應(yīng)的分段的信息則保存在訪問過的集合D中;最后是根據(jù)這些已保存的信息,遍歷整個指令數(shù)據(jù),在遍歷的過程中首先判斷該指令知否在已集合A中,如果是說明此指令是一條正確的指令,進而再判斷此指令是否在集合D中,如果是在說明要在這個地方進行分段處理;如果該指令沒有在已追蹤過的指令則定義成數(shù)據(jù)段,這樣指令追蹤,數(shù)據(jù)段根代碼段分離,指令分段便完成了。[0018]由于采用了上述技術(shù)方案,與現(xiàn)有技術(shù)相比較,本發(fā)明集成了多種系列的單片機反匯編功能,用戶可自行選擇對應(yīng)的單片機,然后導(dǎo)入BIN等格式文件,系統(tǒng)會自動反編譯出對應(yīng)的匯編文件,此匯編文件可實現(xiàn)數(shù)據(jù)與代碼段的分離,并且將程序分段表示,子程序及跳轉(zhuǎn)程序有對應(yīng)的標號,每句程序有相應(yīng)的注釋,程序一目了然,結(jié)構(gòu)層次分明,基本上如同手工編寫的匯編文件,可以最大程度幫助開發(fā)者閱讀及分析程序,同時,可將此匯編文件直接導(dǎo)入到對應(yīng)型號的單片機開發(fā)環(huán)境中進行編譯調(diào)試,現(xiàn)程序可以保證反編譯出的匯編程序可以直接在原開發(fā)環(huán)境中正確的編譯通過。
      【專利附圖】

      【附圖說明】
      [0019]圖1為本發(fā)明一種實施例的程序流程圖。
      【具體實施方式】
      [0020]實施例
      [0021]如圖1所示,一種單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法,具體執(zhí)行步驟如下:
      [0022]步驟1:打開軟件,單擊打開文件按鈕,彈出文件選擇對話框,選擇要打開的文件,文件的格式為.BIN,.HEX,.SN8。
      [0023]步驟2:調(diào)用操作系統(tǒng)的文件操作函數(shù),讀取文件,生成可視化的十六進制字符
      串O
      [0024]步驟3:選擇芯片系列和型號,保存為全局參數(shù),根據(jù)芯片系列和型號,調(diào)取相應(yīng)的處理數(shù)據(jù)表,函數(shù),對象,屬性,方法和結(jié)構(gòu)體。
      [0025]步驟4:讀取已經(jīng)建立好的芯片信息表,獲取其指令位數(shù),按指令位數(shù)將數(shù)據(jù)字符串截取生成數(shù)組,其下標即為地址,每一個數(shù)組成員反翻譯過來就是一條指令,獲取數(shù)組長度Length,聲明存放反翻譯出的指令數(shù)組Instrut。
      [0026]步驟5:從數(shù)據(jù)庫中篩選出該型號的芯片對應(yīng)的指令表信息:指令掩碼OpA、操作碼OpB,原操作數(shù)掩碼OpC、目的操作數(shù)掩碼OpD,其他特殊數(shù)據(jù)掩碼OpE,指令格式Foma,指令名稱Name,指令位數(shù)Bit,指令類型Type,讀取數(shù)據(jù)以行的形式放入內(nèi)存表對象DataTable中,聲明訪問數(shù)組的索引Index,訪問數(shù)據(jù)表的索引I,獲取其數(shù)據(jù)表的行數(shù)Count0
      [0027]步驟6:判斷數(shù)組索引Index是否小于數(shù)組的總長度Length,如果則執(zhí)行步驟7。否則則執(zhí)行步驟18。
      [0028]步驟7:獲取對應(yīng)下標的數(shù)組成員值按照其是大端還是小端進行轉(zhuǎn)換得到要翻譯的數(shù)據(jù)Data。
      [0029]步驟8:判斷訪問數(shù)據(jù)表索引I是否小于指令數(shù)據(jù)表的總長度Count,如果是的話則執(zhí)行步驟9 ;否則則執(zhí)行步驟15。
      [0030]步驟9:得到DataTabel中索引為I的行的指令掩碼OpA,操作碼OpB,原操作數(shù)掩碼OpC,目的操作數(shù)掩碼OpD,其他特殊數(shù)據(jù)掩碼OpE,指令格式Fomat,指令名稱Name,指令位數(shù)Bit,指令類型Type。Data與OpA與運算得到識別指令需要位數(shù)的數(shù)據(jù)DataA。
      [0031]步驟10:判斷DataA是否等于操作碼OpB,如果相等的話則執(zhí)行步驟11 ;否則則執(zhí)行步驟15。
      [0032]步驟11:判斷原操作數(shù)OpC是否為空,如果不為空則OpC與Data與運算得到原操作數(shù)OpCdata ;否則則執(zhí)行步驟14。
      [0033]步驟12:判斷目標操作數(shù)OpD是否為空,如果不為空,則OpD與Data與運算得到原操作數(shù)OpData,否則則執(zhí)行步驟14
      [0034]步驟13:判斷其他類型的操作數(shù)OpE (主要是一些子程序調(diào)用和跳轉(zhuǎn)語句,這類語句有特殊的操作數(shù)那就是跳轉(zhuǎn)地址)是否為空,如果不為空,則OpE與Data與運算得到原操作數(shù)OpData,否則則執(zhí)行步驟14。
      [0035]步驟14:用上述步驟11、步驟12、步驟13獲取的OpCdata, OpDdata, OpEdata分別替換Fomat中對應(yīng)的部分,獲取指令字符串,添加到指令數(shù)組Instruct [Index],同時退出指令表識別循環(huán)程序,跳轉(zhuǎn)到步驟16進行下一條指令的識別。
      [0036]步驟15:數(shù)據(jù)表索引I自動加1,同時跳轉(zhuǎn)到步驟8,重復(fù)執(zhí)行步驟8至步驟14過程,至到步驟8判定條件不在成立即指令數(shù)據(jù)表中所有的指令都,則執(zhí)行步驟16。
      [0037]步驟16:判定存儲當(dāng)前數(shù)據(jù)翻譯出的指令的數(shù)組Instruct [Index]是否為空,如果為空,則說明當(dāng)前數(shù)據(jù)不是任何一條指令的機器碼,即當(dāng)前數(shù)據(jù)就是數(shù)據(jù)段中的數(shù)據(jù)。即此時將該數(shù)據(jù)定義成匯編文件中的數(shù)據(jù)格式即可。否則如果不為空則執(zhí)行步驟17
      [0038]步驟17:數(shù)據(jù)數(shù)組訪問索引Index自加1,同時跳轉(zhuǎn)到步驟6,繼續(xù)進行下一條指令的執(zhí)行。
      [0039]步驟18:從這一步驟開始進入指令追蹤部分,用來給程序添加跳轉(zhuǎn)或子程序調(diào)用的標號,定義數(shù)據(jù)段等功能,首先就是設(shè)定程序追蹤的入口地址tracelndex,定義存儲已訪問過的地址集合A,保存分支另一條地址的集合B,保存子程序調(diào)用返回點或中斷返回點的集合C,記錄跳轉(zhuǎn)標號的集合D。
      [0040]步驟19:判斷tracelndex是否小于指令條數(shù)的總長度Length并且tracelndex不在集合A中并且當(dāng)前指令不是返回指令。如果條件滿足則將該地址存入集合A中順序向下執(zhí)行,不滿足則執(zhí)行步驟23。
      [0041]步驟20:判斷當(dāng)前指令是否是分支跳轉(zhuǎn)如果是的話則將要跳轉(zhuǎn)的地址給tracelndex,將另一分支的地址存入集合B中。否則向下執(zhí)行。
      [0042]步驟21:判斷當(dāng)前指令是否是子程調(diào)用語句,如果是的話則將要調(diào)用的地址給tracelndex,將一條指令的地址存入集合C中,同時將該地址存在集合D中。否則順序向下執(zhí)行。
      [0043]步驟22:判斷當(dāng)前指令是否是直接跳轉(zhuǎn)指令,如果是的話將要跳轉(zhuǎn)的地址給tracelndex,同時將該地址存在集合D中。否則的話則將tracelndex自加I跳轉(zhuǎn)到步驟
      19執(zhí)行。
      [0044]步驟23:判斷當(dāng)前指令是否是返回指令,如果是則將該指令存入集合A中。
      [0045]步驟24:判斷集合C是否為空,如果不為空則將集合C最后一個地址給tracelndex,并移除該項,并跳轉(zhuǎn)到步驟19。
      [0046]步驟25:判斷集合B是否為空,如果不為空則將該集合B中的最后一個地址給tracelndex,并移除該項,并跳轉(zhuǎn)到步驟19。
      [0047]步驟26:聲明一個存放結(jié)果的字符串對象Str,建立一個循環(huán)索為ResultIndex引從O開始,長度為Length即數(shù)據(jù)數(shù)組的總長度,遍歷數(shù)據(jù)數(shù)據(jù),在遍歷的過程中要判斷該索引是否在存儲已訪問過的地址集合A中如果是說明當(dāng)前索引的數(shù)據(jù)是指令,即將Intruct[ResultIndex]添加到對象Str中。否則將當(dāng)前索引數(shù)據(jù)定義為數(shù)據(jù)段格式,如果當(dāng)前索引在記錄跳轉(zhuǎn)標號的集合D中,就要在當(dāng)前位置加入該索引對應(yīng)的標號。同時還可以加入分割線(要放在注釋里面)以便反出來的程序在編譯的時候可以順利通過。這樣最終的結(jié)果就保存在了 Str對象里面,可以將此對象的內(nèi)容顯示在軟件的顯示數(shù)據(jù)控件里,或者導(dǎo)出到asm文件中,這樣的完整的反匯編流程就完成了。
      [0048]本發(fā)明不局限于上述的優(yōu)選實施方式,任何人應(yīng)該得知在本發(fā)明的啟示下做出的變化,凡是與本發(fā)明具有相同或者相近似的技術(shù)方案,均屬于本發(fā)明的保護范圍。
      【權(quán)利要求】
      1.一種單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法,包括單片機內(nèi)的匯編指令,其特征在于:單片機內(nèi)的匯編指令實現(xiàn)數(shù)據(jù)與代碼段的分離,并且將程序分段表示為子程序及跳轉(zhuǎn)程序,子程序及跳轉(zhuǎn)程序有各自對應(yīng)的標號,并且每句程序有相應(yīng)的注釋,同時,單片機內(nèi)的匯編指令直接導(dǎo)入到對應(yīng)型號的開發(fā)環(huán)境中進行編譯調(diào)試,可以保證反編譯出的匯編程序可以直接在原開發(fā)環(huán)境中正確的編譯通過。
      2.根據(jù)權(quán)利要求1中所述的單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法,其特征在于:單片機從機器語言找回匯編語言的工具的系統(tǒng)工作步驟如下: 1)、打開要反匯編的源文件,工具會讀取這些文件的內(nèi)容,并轉(zhuǎn)換成可視的十六進制字符串的; 2)、工具會將選擇的芯片型號作為一個全局變量進行保存,在反翻譯和追蹤的過程中都會選擇與該芯片型號對應(yīng)的指令信息數(shù)據(jù)表、相關(guān)的處理函數(shù)、方法、對象; 3)、根據(jù)選擇的芯片型號調(diào)取其指令執(zhí)行的位數(shù)信息,將第一步中讀取的文件數(shù)據(jù)按照這個單位進行截取,生成一個原數(shù)據(jù)的數(shù)組; 4)、反翻譯的過程,反翻譯的過程就是按照對應(yīng)表,將機器碼反向翻譯成助記符,從而幫助開發(fā)者重新看懂程序,獲取算法,進而改善或修改程序; 所述對應(yīng)表是正常翻譯指令的過程是將對應(yīng)指令的助記符翻譯成該指令唯一對應(yīng)的機器碼,在這其中必須要有一個相配合的對應(yīng)表; 所述翻譯是獲取各種系列芯片的機器碼表和對應(yīng)的指令格式,然后依據(jù)此指令的機器碼格式獲取了這整個芯片系列的所有指令碼基礎(chǔ)數(shù)據(jù)表,同時,此指令中包含有指令掩碼,指令掩碼負責(zé)過濾出指令操作碼部分數(shù)據(jù),而后的操作碼則與過濾出的指令操作碼數(shù)據(jù)部分比較,如果一致則說明當(dāng)前數(shù)據(jù)是本條指令,確定為那一條指令后再利用掩碼篩選出對應(yīng)的原操作數(shù),目的操作數(shù)或其他特殊的得數(shù)據(jù),篩選出對應(yīng)的數(shù)據(jù)后則分別取替換對應(yīng)當(dāng)前指令的指令格式中的對應(yīng)的字符,`這樣這一條指令就被識別并反成匯編語言; 而翻譯出所有的指令就是要建立一個原數(shù)據(jù)數(shù)組的索引,索引從零開始,以依次加一的方式來遍歷原數(shù)據(jù)數(shù)組成員,按照上述操作步驟將每一個數(shù)組成員反應(yīng)成對應(yīng)的指令,如果該數(shù)組成員的數(shù)據(jù)不符合任何一條指令的機器碼格式則說明此數(shù)組成員數(shù)據(jù)是匯編語言中定義的數(shù)據(jù),最后也要將其定義成匯編語言的數(shù)據(jù)格式,將翻譯的結(jié)果不管是指令還是數(shù)據(jù)都保存到一個對應(yīng)數(shù)目的新的指令數(shù)組里面; 5)、追蹤指令過程:是利用軟件模擬單片機正常的執(zhí)行流程,但不同的是這里只要認為單片機能夠能執(zhí)行的地方全都要追蹤過去,指令追蹤分離數(shù)據(jù)段和程序段,添加跳轉(zhuǎn)標號,給程序分段各種操作中就以此數(shù)組數(shù)據(jù)為依據(jù)進行;這樣做的目的就是為了實現(xiàn)指令與數(shù)據(jù)段的分離,同時在追蹤的過程中可以將跳轉(zhuǎn)語句和子程序調(diào)用語句標示出來,從而實現(xiàn)指令的分段; 6)、利用多文檔程序結(jié)構(gòu)顯示分匯編結(jié)構(gòu),并按照功能按鈕的控制進行顯示或者導(dǎo)出。
      3.根據(jù)權(quán)利要求2中所述的單片機從可執(zhí)行文件找回匯編文件的實現(xiàn)方法,其特征在于:步驟5)中追蹤指令過程如下:首先要建立四個大小可以根據(jù)數(shù)據(jù)自動調(diào)整的字符串集合,分別是訪問過的指令集合A,子程序調(diào)用或中斷處理程序調(diào)用時保存其斷點的集合B,保存其分支判斷語句的另一條指令的集合C和訪問過的跳轉(zhuǎn)標號集合D ;然后開始追蹤,程序?qū)凑罩付ǖ娜肟诘刂?,去訪問已經(jīng)翻譯好的指令數(shù)組,其數(shù)組的下標其實也就是該條指令的對應(yīng)的地址,第一步判斷該地址是否是已經(jīng)被訪問過或者超越最大地址或者是中斷或子程序返回語句,如果不是,則把改指令加入集合A中,進而判斷該語句是否是分支跳轉(zhuǎn)語句,如果是則保存該分支跳轉(zhuǎn)語句的另一條分支地址到集合B中,目的是當(dāng)一條分支走完后,在重新走另一條分支;如果不是分支跳轉(zhuǎn)語句,則判斷是否是子程序調(diào)用或者是直接跳轉(zhuǎn)語句,如果是子程序調(diào)用則先要保存一下該子程序調(diào)用完要返回的地址到集合C中,否則是直接跳轉(zhuǎn)語句則按照其跳轉(zhuǎn)的地址直接跳轉(zhuǎn);如果上述指令都不是,則是普通的運算類或邏輯類指令,將指令地址加I后重新重新調(diào)用該函數(shù),進行進行下一條指令的追蹤;到這里返回到開始如第一步判斷為假的話,那么繼續(xù)判斷該指令是否是子程序或中斷返回;如果是的話則同樣將該指令加入到集合A中,否則,判斷集合C中是否為空,不為空的話拿出最后一條指令,去追蹤并將該條指令從集合中刪除,直到該指令集合為空的時候以同樣分方式再去拿集B合中的指令去跟蹤,按照此流程直到把所有的指令跟蹤完后,沒有在已訪問過的指令集合中的則肯定是數(shù)據(jù)段了,而對應(yīng)的分段的信息則保存在訪問過的集合D中;最后是根據(jù)這些已保存的信息,遍歷整個指令數(shù)據(jù),在遍歷的過程中首先判斷該指令知否在已集合A中,如果是說明此指令是一條正確的指令,進而再判斷此指令是否在集合D中,如果是在說明要在這個地方進行分段處理;如果該指令沒有在已追蹤過的指令則定義成數(shù)據(jù)段, 這樣指令追蹤,數(shù)據(jù)段根代碼段分離,指令分段便完成了。
      【文檔編號】G06F9/44GK103885770SQ201410025682
      【公開日】2014年6月25日 申請日期:2014年1月21日 優(yōu)先權(quán)日:2014年1月21日
      【發(fā)明者】唐道成 申請人:唐道成
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1