專利名稱:基于多維可變描述表的處理器結構與指令系統表示方法
技術領域:
本發明涉及計算機軟件逆向分析領域,特別涉及一種基于多維可變描述表的處理器結構與指令系統表示方法。
背景技術:
計算機軟件的逆向分析中,對于特定處理器的目標代碼還原,使用靜態描述表可以有效表示處理器結構和指令基本碼與匯編指令的對應關系。但由于不同處理器的結構和指令系統的差異性非常大,靜態描述表不適用于多處理器多指令系統的統一表示。
當前的微處理器的結構特征主要從以下三個方面進行描述 1、微處理器結構特點。從功能結構和應用背景看,微處理器可以分成微處理器MPU(Micro Processor Unit)、微控制器MCU(Micro Controller Unit)和數字信號處理器DSP(Digital Signal Processor)三大類。MPU是計算機和其他應用系統的核心部件,主要由運算單元、寄存器陣列、Cache和總線接口等部分組成。MCU一般以某一種MPU內核為芯片核心,內部集成ROM、EPROM、EEPROM、FLASH、RAM、A/D、D/A、總線邏輯、定時器/計數器、看門狗、1/O、串行接口、脈寬調制器等功能部件。為了適應不同的需要,一般一個系列的MCU具有多種衍生產品,每種衍生產品的內核都一樣,不同的是內部集成的存儲器容量、端口資源種類的配置以及封裝形式,從而使MCU最大限度地與應用需求相匹配。DSP與MPU和MCU的最大區別在于DSP通常使用哈佛結構和專門針對信號處理而設計的指令,具有乘累加硬件單元和專用的乘累加指令,具有較強的數據處理能力,多數指令可以直接訪問存儲單元,且一條指令可以同時訪問多個存儲單元,加快了數據訪問速度。
2、微處理器標識信息。處理器標識信息包括處理器生產廠家、處理器名、處理器系列、處理器類型、處理器位數、封裝形式等信息。處理器類型是最重要信息,決定著目標代碼分析過程可依據的結構參數和指令系統。各個處理器廠家各自有自己的主打生產處理器系列,它們在處理器類型、處理器位數和封裝形式上有各自的固定配置。為適用不同的應用領域,不同廠家生產的相同型號或系列處理器往往擁也有多種封裝形式。封裝形式主要有雙列直插DIP,塑料扁平封裝QFP,小型集成電路封裝SOIC,陶瓷柵陣列PGA等。在無法預知目標碼屬于哪一款處理器的情況下,可以根據處理器的外在特性(封裝類型、引腳數、生產廠家等等)篩選處理器候選集,以縮小識別范圍。
3、微處理器中代碼執行相關資源。微處理器中代碼執行相關資源包括指令結構和指令系統、寄存器組、中斷結構和中斷向量、可尋址內外部存儲器結構、復位類型和復位入口地址等。指令結構所包含的基本信息包括處理器能識別的指令條數、指令尋址基本單位(基本指令字長,每次取指后程序計數器的自動累加值)、最小指令長度、最大指令長度、指令操作數個數等。寄存器是CPU內的存儲單元,結構與處理器結構密切相關。寄存器組相關信息包括寄存器的名稱、長度、內容、映射方式、狀態模式、物理映射等屬性。中斷結構和中斷向量表是代碼執行入口的重要信息,由于不同型號處理器中斷功能各不相同,中斷向量表的類型,尋找中斷處理程序入口地址需要做特殊的處理。
為滿足多處理器多指令系統的通用性和可擴展性需求,需要解決一系列問題,首先是抽象出各款處理器結構和指令系統內在的普遍性特征;其次是定義一個通用表達方式去解析指令相關屬性;再則還需要解決不同尋址方式帶來的地址表達和計算問題。
常用嵌入式處理器的指令系統體系結構有兩種一種是復雜指令集CISC(Complex Instruction Set Computer)結構。以Intel X86為代表的微處理器采用這種體系結構。另一種是精簡指令集RISC(Reduced Instruction Set Computer)結構,大多數MCU和DSP處理器都采用RISC結構。CSIC結構是為了增強指令的功能,設置一些功能復雜的指令,把一些原來由軟件實現的改用硬件來實現。RISC系統盡量簡化指令功能,只保留那些功能簡單、能在一個機器周期內完成的指令,較復雜的功能用一段子程序來實現。但無論是哪種指令結構,都包含四個要素指令類型、指令操作、尋址模式和操作數。當前的指令系統結構特征主要從以下三個方面進行描述 1、機器指令一般格式。機器指令是處理器唯一能識別的指令形式,由連續的二進制碼組成。一般地,根據機器指令各二進制碼位的功能不同,可以將機器指令表示為一個由操作碼、條件碼和操作數編碼構成的三元組。操作碼是唯一標識機器指令的若干二進制碼位,用于標識指令的功能。條件碼用于表示指令執行的條件,一種機器指令可以在多種不同的條件下執行,對于一條機器指令來說,條件碼部分是不確定的。操作數編碼是指令所操作對象的二進制編碼值,一條機器指令可以對多種不同的對象進行操作。
2.匯編指令的一般表示形式。匯編指令是一種對程序員來說可讀性相對較強的指令形式,其表示形式是字符串。一般地,按照匯編指令表達式的邏輯功能,也可以看成操作符、條件詞、操作數的一個三元組。一條匯編指令可以帶多種條件詞和不同的操作數的組合,表示指令的不同執行條件。
3.機器指令與匯編指令的對應關系。匯編語言是最接近機器語言的指令表示方式,每條匯編指令都能唯一地對應于一條機器指令,匯編指令的各組成部分與機器指令的各組成部分之間存在確定的對應關系。匯編指令操作符與機器指令操作碼之間存在一對多的關系,通常當機器指令操作碼編碼值確定時,其所對應的匯編指令操作符也可以確定;但匯編指令操作符根據執行條件以及操作對象的不同可能對應于多種不同的機器指令操作碼值。但匯編指令的條件詞表達式與機器指令的條件碼編碼值之間存在一一對應的關系,且這種對應關系不隨指令的不同而不同,即某一種條件碼編碼值將一定對應與某一種條件詞。匯編指令的操作數部分與機器指令的操作數編碼部分也存在確定的對應關系,機器指令中的寄存器編碼、字符串編碼以及數值編碼對應出現在匯編指令操作數部分的寄存器類、字符串類以及數字類可變部分的二進制編碼信息。至此可以得出機器指令與匯編指令之間的對應關系為根據機器指令中的操作碼確定匯編指令的操作符;根據機器指令的條件碼唯一確定匯編指令中的條件詞;根據機器指令中的寄存器編碼、字符串編碼以及數字編碼,唯一的確定匯編指令中出現的寄存器名、字符串以及某種進制的數字。
發明內容
本發明要解決的技術問題是針對現有技術不足,提出一種基于多維可變描述表的處理器結構與指令系統表示方法,它通用性強,可用于現有的大多數處理器。
本發明的技術方案 一種基于多維可變描述表的處理器結構與指令系統表示方法,采用多層三元組嵌套表Table構建處理器結構特征庫和指令系統描述模板,多層三元組嵌套表Table含有處理器標識信息表Tp、與Tp對應或匹配的處理器結構信息表Ts、與Tp對應或匹配的處理器的指令系統表Ti,多層三元組嵌套表Table表示為{<Tp1,Ts1,Ti1>,<Tp2,Ts2,Ti2>,……,<Tpn,Tsn,Tin>},其中n為大于等于1的自然數,每個三元組<Tpn,Tsn,Tin>代表一款處理器,處理器標識信息表Tp對處理器進行分類、索引和篩選,處理器結構信息表Ts提供寄存器結構信息、中斷結構信息、復位地址信息和存儲空間分配信息,處理器的指令系統表Ti提供機器編碼、匯編表達式和兩者之間的映射關系。
多層三元組嵌套表Table中的數據從處理器信息數據庫中提取,對處理器信息數據庫可進行管理和維護,管理和維護含有登錄、數據錄入、數據查詢、數據修改、數據引用、數據輸出和系統維護,登錄用于管理系統的授權使用,非授權用戶禁止進入系統,不同授權用戶對系統信息的使用權限也是不一樣的,如代碼分析員的授權為“引用授權”,只能通過反匯編接口和結構分析接口調用數據庫信息,而數據錄入員的授權為“錄入授權”,可以對數據庫信息進行增、刪、查、改等操作,數據錄入、查詢、修改、引用、數輸出和維護等都是數據庫系統的基本功能,數據引用模塊是反匯編、結構分析和指令集識別等部件的數據引用接口。
處理器信息數據庫含有處理器分類信息表(見表1)、處理器基本結構信息表(見表2)、存儲空間分配表(見表3)、指令系統信息表(見表4)、通用尋址類型表(見表5)、寄存器表(見表6)、代碼字符轉換表(見表7)、中斷向量信息表(見表8)、特征信息表(見表9)、處理器封裝類型表(見表10)。
處理器標識信息表Tp含有處理器分類信息表(見表1)和處理器封裝類型表(見表10)。
處理器分類信息表(見表1)含有處理器編號、處理器名、處理器類型、處理器生產廠家、處理器系列號、處理器位數、封裝類型; 處理器封裝類型表(見表10)含有處理器編號、封裝引腳編碼、引腳數、封裝名稱。
由于許多處理器的同一款型號有多種封裝和引腳的組合,如由Motorola公司生產微控制器MC68HC05SR3有三種封裝形式40引腳雙列直插封裝(DIP);42引腳塑料收縮型雙列直插封裝(SDIP);44引腳塑料四面扁平型封裝(QFP)。處理器與其封裝/引腳是存在一對多的關系,所以將其獨立出來。
處理器結構信息表Ts含有指令基本信息表、寄存器信息表、中斷結構表、存儲空間配置表、處理器復位地址表。
指令基本信息表含有指令條數(在表2中)、基本的指令字寬(在表2中)、最小指令長度(在表2中)、最大指令長度(在表2中)、指令操作數最大個數(在表2中),指令基本信息表主要用于標識不同處理器的指令編址長度及CISC指令集的變長指令; 寄存器信息表表示為<TREG1,TREG2,……,TREGk>,其中k為大于等于1的自然數,任一個TREGk含有寄存器名(在表6中)、寄存器的長度(在表6中)、寄存器編碼(在表6中)、寄存器擴展編碼(在表6中),每個TREGk代表一個寄存器,根據寄存器編碼以及寄存器擴展編碼索引到某一個具體的寄存器,并使用其匯編表示符替換可變替換字符串變量,從而得到與寄存器有關的匯編指令字段; 中斷結構表含有中斷向量數(在表2中)、中斷向量長度(在表8中)、中斷向量表基地址(在表2中)、是否為浮動中斷向量表(在表2中)、中斷向量表是否有效(在表2中)、中斷向量表,中斷向量表表示為<INTADD1,INTADD2,……,INTADDr>,其中r為大于等于1的自然數,任一個INTADDr含有中斷向量號(在表8中)、中斷向量地址(在表8中)、中斷類型(在表8中)、中斷向量組成指示字(在表8中)、中斷功能(在表8中),中斷向量表內容是標識目標代碼基本入口的重要信息,由于不同型號處理器中斷功能各不相同,中斷向量存在不同的類型,尋找中斷處理程序入口地址需要做特殊的處理,各中斷類型通常對應不同的中斷源,如RESET、硬中斷、軟中斷、定時器中斷、串口中斷、D/A中斷、A/D中斷等,中斷向量表有效,則中斷結構信息多元組中的信息均為有效信息,若中斷向量表為固定類型,可以從中斷向量表直接獲得中斷向量,若中斷向量表為浮動類型,則說明中斷向量基地址存放在某一寄存器或內存單元中,如由Motorola公司生產的一款微控制器MC68000,它的中斷向量表是不確定的,其中斷向量基地址放在VBR寄存器中[12],需要根據其內容計算得到中斷向量表起始地址; 存儲空間配置表表示為<空間配置信息表、空間分配表1,……,空間分配表m>,其中m為大于等于1的自然數,所述空間配置信息表含有數據總線寬度(在表2中)、地址總線寬度(在表2中)、存儲器編址方式(在表2中)、可尋址的存儲器大小(在表2中)、內部存儲空間最大容量(在表2中)、外部存儲空間最大容量(在表2中)、內部存儲空間分段數(在表2中)、外部存儲空間分段數(在表2中)、內部端口數量(在表2中)、內部端口寬度(在表2中)、外部端口數量(在表2中)、外部端口寬度(在表2中),任一空間分配表m含有子存儲空間名(在表3中)、子存儲空間起始地址(在表3中)、子空間大小(在表3中),每個空間分配表m對應一個存儲空間或IO空間,存儲空間是代碼的物理存在空間,代碼處理(尤其是訪存指令和轉移指令)時,目標地址必須考慮其空間分布狀況,通常嵌入式處理器都有片內部存儲空間和片外存儲空間,內外空間的容量、速度有較大差異,存儲空間還有兩種結構--馮.諾依曼結構和哈佛結構,其主要區別在于馮.諾依曼結構允許指令和數據混合存儲在同一存儲模塊中,而哈佛結構使用獨立的存儲模塊來分別存儲指令和數據,根據處理器不同存儲器子空間的功能分為內部程序空間、內部數據空間、內部指數混存空間、外部程序空間、外部數據空間、外部指數混存空間和內外部IO空間等類型,明確每個存儲空間的范圍和用途的另一個重要作用是指令合法性檢查,如代碼程序存儲空間在2000H到3000H之間,如果反匯編得到指令CALL1000H,跳轉地址超出了程序存儲空間的地址范圍,可以判斷為非法轉移指令; 處理器復位地址表表示為<處理器復位入口地址1(在表2中),處理器復位入口地址2(在表2中),……,處理器復位入口地址p(在表2中)>,其中p為大于等于1且小于等于8的自然數,處理器復位入口地址p是處理器目標代碼的初始入口地址,只是對應上電復位、軟件復位、程序異常等處理模式不同而已。
處理器的指令系統表Ti含有指令的機器編碼、匯編表達和從機器編碼到匯編表達的映射關系,解決了將多種不同型號處理器指令的機器編碼、匯編符號和從機器編碼到匯編符號的變換這三個方面的統一表示方法,就能使反匯編器采用統一的方法將運行于不同型號處理器上的二進制可執行程序轉換為匯編程序。
指令的機器編碼表示為<機器碼字段1,機器碼字段2,……,機器碼字段q>,任一機器碼字段q含有第q指令字二進制編碼(在表4中)、第q指令字掩碼(在表4中)、可變部分相關二進制碼位置,其中q為大于等于1且小于等于8的自然數,參照機器指令的一般格式,用指令字二進制編碼及其掩碼來唯一標識指令的一個二進制代碼字段,掩碼指示機器指令中指令字所在的位置,其構造方式為若某一位屬于指令字,則在對應位上置“1”,否則對應位清“0”,可變部分相關二進制碼位置指示與各可變部分相對應的二進制碼位在機器指令中所在的位置; 所述匯編表達表示為<匯編符字段1,匯編符字段2,……,匯編符字段s>,任一匯編符字段s含有指令匯編符(在表4中)、替換字符串s的二進制編碼(在表4、5中)、細分類別碼s(在表4、5中),其中s為大于等于1且小于等于16的自然數,指令匯編符表示指令匯編助記符中與該指令有關的固定字符和可變字符串,在指令操作符的可變字符處使用字符串變量<C1>~<Cn>表示,在操作數會發生變化的字符串處使用從字符串變量D開始的字符進行替換,這些字符串變量按順序分別對應于替換字符串token的二進制編碼,替換字符串token細分類別碼是對某種可變部分類型的進一步細分,在表示寄存器名與二進制碼之間對應關系的過程中,可能存在不同的寄存器名對應于相同二進制碼的情況。例如68000中對地址寄存器A3和數據寄存器D3在指令中出現時都用的是編碼011,為了進行區分將數據寄存器的類別碼編為00h,而將地址寄存器類別碼編碼為01h。在表示字符串的過程中也存在相同的情況,同樣需要擴展類型,而在表示數字類型的可變部分時,擴展類型表示當前的數字所使用的進制,包括十六進制、十進制、八進制以及二進制,匯編符字段與機器碼字段一一對應,從機器碼到匯編語句的變換就是每個字段的轉換; 匯編指令的固定部分直接用實際字符串表示,而可變部分使用帶編號的字母來代替,因此字段映射關系的確定實際上就是完成可變部分的符號替換,以確定匯編指令的每一個字段匯編符號,可變部分出現在條件詞部分和操作數位置上,條件詞部分出現的可變部分一定是某種形式的字符串,而在操作數位置上出現的可變部分,可能為三種類型之一①寄存器類,該可變部分出現的是寄存器名;②字符串類,該可變部分出現的是某種有特殊含義的字符串;③數值類,該可變部分出現的是某種進制的數值(如立即數等),因此,從機器編碼到匯編表達的映射關系含有字符串映射、寄存器映射、數值映射; 字符串映射含有匯編字符串、機器二進制編碼、細分類型及編碼;在某些處理器的指令集中,二進制代碼需要翻譯成字符串來表示,同一指令系統中可能有不同的字符串使用相同的編碼,遇到這樣的字符串時,將表示字符串的指令二進制碼進行細分,使用細分類別碼來表示不同類型的字符串,字符串映射能根據字符串細分編碼和字符串在指令中的二進制編碼的拼接索引到某一項,使用字符串匯編表示方法替換某一個指令的可變字符串變量。
寄存器映射含有寄存器名(在表6中)、寄存器編碼(在表6中)、寄存器擴展編碼(在表6中); 數值映射根據替換字符串的類型直接完成數值轉換,除此而外,替換字符串的類型還有轉移目標地址計算和通用尋址類型。
不同處理器的轉移指令所使用的目標地址計算方法不相同,同一處理器的不同轉移指令所使用的目標地址計算方法也不盡相同。顯示含有轉移目標地址的指令(如直接跳轉以及直接調用指令),可以以形式化的方式給出其目標地址的計算方法,其一般表示形式為 [n∧/∨][old$/new$+]signx_oper/unsignx_oper[+m] 含義為當前指令的地址(old$)或者下一條指令的地址(new$)與高n位為1的數執行邏輯與(∧)或者邏輯或(∨)操作,加上目標地址計算之前指令操作數(oper)的帶符號擴展為x位(signx_oper)或無符號擴展為x(unsignx_oper)后的結果,再加上數字m(+m),形成跳轉或調用的目標地址。“[]”表示這個部分可以省略,“/”表示兩種情況只取其一。
在表示尋址方式表達式時,使用與指令表達式相同的設計方法,將某一替換字符串變量再細分成多個替換字符串變量,同樣分為可變和固定的字符串,每個可變字符串(token)的類型同樣取值為寄存器類型、字符串類型、數值類型。例如對于尋址方式d[BI+DI],(其中d表偏移量,BI和DI都是寄存器)其匯編表達式存儲格式為<T1>[<T2>+<T3>]。
尋址方式表達式=<尋址方式判別碼位置,尋址方式判別碼值,token相關的二進制碼位置,尋址方式匯編表達式,替換字符串token類型,token擴展類型>。
表1處理器分類信息表 表2處理器基本結構信息表 表3存儲空間分配表 補充說明1 子存儲空間特性及讀寫屬性的編碼 使用一個字節對子存儲空間特性進行編碼,具體的編碼如下圖所示 7 3 2 1 0 3~7位對子存儲空間特性的編碼。主要用于區分內部和外部的程序空間、數據空間以及指數混存空間,具體編碼為 00000不可知的子空間特性編碼;00001內部程序空間(IC); 00010內部數據空間(ID); 00011內部指數混存空間(ICD); 00100外部程序空間(EC); 00101外部數據空間(ED); 00110外部指數混存空間(ECD); 2位表示該存儲空間是可讀的。1位表示該存儲空間是可寫的。
0位表示該存儲空間是可執行的。
通過對這三位的組合可以表示8種不同的存儲空間讀寫類型。
表4指令系統信息表 補充說明2 A.指令匯編表示字段說明 這里是對指令匯編表達式的形式化描述,將每一條指令看作是多個可單獨表示的字符串(可單獨表示的字符串是指在指令的各種形式中固定不變或能歸為以下的12種類型之一的替換字符串變量)的連接,這些字符串可以是不變的,也可以是變化的。對于不變的字符串來說,只要將它們直接表示在指令的匯編表示方式中;對于變化的字符串來說,每一個字符串都用一個帶編號的替換字符串變量來表示,其中在與操作碼有關的替換字符串變量使用<C1>…<Cn>來表示,與操作數有關的替換字符串變量使用C以后的字母來表示,即與第1個操作數有關替換字符串變量使用<D1>…<Dn>,與第2個操作數有關的替換字符串變量使用<E1>…<En>,以此類推。例子 ADD,<C1>,…<Cn><D1>[<D2>+<D3>],<E1>[<E2>…<En>],… 每個替換字符串變量可能為以下12種類型之一 類型1使用指令二進制碼中的相關位直接用16進制表示。
類型2使用指令二進制碼中的相關位加上更新后的程序計數器的值,并用16進制表示。
類型3使用指令二進制碼中的相關位加上更新前的程序計數器的值,并用16進制表示。
類型4使用指令二進制碼中的相關位直接用浮點立即數的形式表示。
類型5使用指令二進制碼中的相關位直接用10進制表示。
類型6寄存器的表達方式。
類型7根據二進制代碼轉換為某種字符串(寄存器除外)。
類型8通用尋址表達方式。
類型9帶符號擴展為16位。
類型10帶符號擴展為32位。
類型11帶符號擴展為64位。
類型12無符號擴展為16位。
類型13無符號擴展為32位。
類型14無符號擴展為64位。
Ci可能表示的類型類型1/類型5/類型8 Di/Ei/…可能表示的類型類型1/類型2/類型3/類型4/類型5/類型6/類型7/類型8/類型9/類型10/類型11/類型12/類型13/類型14。
B.替換字符串的二進制碼/細分類別碼/替換字符串類型指示字結構說明 這3個字段描述的是某一種字符串的類型及其產生方法的,產生字符串以后將替換在指令匯編表達式中對應的字符串變量,從而形成適當的匯編指令格式。
*替換字符串的二進制碼的組成可以有6個部分構成,每個部分的結構為 二進制碼長度1個字節;0表示無效 指令字序1個字節;出現的指令字序號; 起始位置1個字節;在某個指令字中的起始位號 例子假設為了得到某一個替換字符串將要使用位用x表示(指令字長度為8,并且該組成部分分布在連續的區域) 指令字011111111 指令字101xxxxx0 這3個字節的值分別為5,1,1,最后這18個字節的值為00 00 00 00 00 0000 00 00 00 00 00 00 00 00 05 01 01h。
*替換字符串類型指示字 每個替換字符串4位——指示屬于以上所述的14種類型的哪一種,共64位。
0000 未使用(表示這條指令中此替換字符串未使用); 0001 類型1; 0010 類型2; 0011 類型3; 0100 類型4; 0101 類型5; 0110 類型6; 0111 類型7; 1000 類型8; 1001 類型9; 1010 類型10; 1011 類型11; 1100 類型12; 1101 類型13; 1110 類型14; *細分類別碼 主要用于字符串的類型為類型6和類型8的情況,對應與寄存器表和代碼字符轉換表中編碼的高位部分(具體解釋見寄存器表和代碼字符轉換表中的解釋)在入庫的過程中,使用下拉列表來讓用戶進行選擇,下拉列表中的內容是從寄存器表或代碼字符轉換表中讀取的類別碼。
例子68000中對地址寄存器A3和數據寄存器D3在指令中出現時都用的是編碼011,為了進行區分將數據寄存器的類別碼編為00h,而將地址寄存器類別碼編碼為01h。
C.指令類型 指令類型編碼可分為3小部分,第1小部分為指令大類編碼,第2小部分為特殊意義編碼字段,第3小部分為指令類型的詳細編碼。
15 14 121110 9 8 7 6 0 第15位用來表示這種類型的指令是否改變程序的流程。若該位為1,表示該類型的指令改變程序的流程;若該位為0,表示該類型的指令不改變程序的流程。12~14位用來表示某種大類的指令,如條件跳轉類,無條件跳轉類,數據傳送類等,這幾位將直接決定指令的對流程產生何種影響,是程序框架分析的主要依據。
當15位為1時,這幾位的編碼情況為 000條件跳轉指令 001無條件跳轉指令 010條件分支(調用)指令 011無條件分支(調用)指令 100返回類指令 101復位類指令 110陷阱指令(包括軟中斷指令) 111條件返回類指令 當15位為0時,這幾位的編碼情況為 000未知指令 001測試類指令(包括比較指令等) 010系統控制類指令(包括某些特權指令,置位或修改條件碼寄存器的狀態位的指令,以及協處理器控制指令) 011堆棧操作類指令 100地址操作類指令 101浮點操作類指令(浮點指令的立即數有特殊的表示方法) 110數據傳送類指令(包括輸入輸出類指令以及常傳送指令) 111數據運算類指令(包括邏輯運算類指令,數字運算類指令,位運算類指令) 11位指令是否影響標志位。若該位為1,則表示這種指令影響標志位;若該位為0,則表示這種指令不影響標志位。
10位保留,恒為1。
9位若為0表示出棧指令,為1表示入棧指令。
8位若該指令為跳轉指令,則用該位來標識該指令是否是間接轉移。
7位表示該指令是否為需要特殊處理的指令 0~6位指令類型的詳細分類。
指令的詳細分類將根據不同的處理器進行,對某一種具體的指令賦予同樣的編碼,如將各種MOV(包括MOV.L,MOV.B等)指令都編碼為000000。
表5通用尋址類型表 補充說明3 A.尋址方式代碼位置/尋址方式代碼編碼值說明 在使用通用的尋址方式字段的指令系統中,必然有某些位來指示使用了哪一種尋址方式,這些位就是尋址方式判別碼,數據庫表中的尋址方式判別碼位置/尋址方式判別碼編碼值字段就是指示這些位在指令中的位置以及內容的,該表中的每條記錄在尋址方式判別碼字段都會有不同的值。
*尋址方式代碼位置指示組合后的通用尋址方式二進制碼字段以及擴展指令字中,某一種尋址方式的判別碼所在的位置及長度,由六個部分組成每個部分用3個字節來表示,高字節表示長度,中間字節表示指令字號,低字節表示在某個指令字中的起始位置,與指令系統表中的“替換字符串的二進制碼”字段含義相同。
*尋址方式代碼編碼值指令中出現某一種尋址方式時,以上字段所指示的位置上的值。按照位的高低關系拼接成兩個字節,沒有使用到的部分用0表示。
例子在X86的指令系統中,假設指令的表達式為ADD<D1>,<E1>,其中<D1>是寄存器類型的替換字符串;<E1>是通用尋址類型的替換字符串,使用指令的第1(指令字編號從0開始)指令字的最高2位和最低3位聯合來表示尋址方式,故在指令系統表中在“替換字符串2的二進制碼的組成部分”字段的值為00 0000 00 00 00 00 00 00 00 00 00 02 01 06 03 01 00。所以對替換字符串變量<E1>進行處理時,將指令字1中的這5位取出,作為通用尋址方式中的指令字0,而區分不同的尋址方式使用的就是這5位的值,故尋址方式代碼位置字段的值為00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00。若表示直接尋址時,第1指令字的最高2位為11,第2指令字的最高2位為10,則尋址方式代碼編碼值為000E。
B.尋址方式匯編表達式說明 某一種尋址方式的形式化描述,將匯編表達式看作是多個可單獨表示的字符串(可單獨表示的字符串是指在指令的各種形式中固定不變或能歸為以上所述的8種類型之一的token)的組合,表達的形式與指令的匯編表達式類似。在會發生變化的字符串處使用字符串變量Ti來表示。
Ti可能的取值為類型1/類型2/類型3/類型4/類型5/類型6/類型8例子對于尋址方式d[BI+DI],(其中d表偏移量,BI和DI都是寄存器)d,BI,DI是會發生變化的,故對于這種尋址方式的匯編表達式為<T1>[<T2>+<T3>]。
C.替換字符串的二進制碼/細分類別碼/替換字符串類型指示字說明 *替換字符串的二進制碼指示形成某個替換字符串所依據的組合后的通用尋址方式二進制碼以及擴展指令字中表示替換字符串變量所使用的二進制碼所在位置,便于反匯編時從中取出相應的位。
*替換字符串類型指示字表示匯編指令中字符串與指令二進制編碼之間的關系類型,根據這個類型可以使用不同的方法完成從指令的二進制碼到指令匯編符的翻譯,該字段為32位。
這三個字段含義及入庫方法與指令系統庫相同。注意的一點,在二進制碼組成字段的指令字號部分若為0,表示選擇組合后的通用尋址指令字(在指令系統表中的替換字符串二進制碼組成中已經完成組合,例子見尋址方式判別碼位置/尋址方式判別碼編碼值字段說明),為1表示選擇基本指令字組成的后續指令字,以此類推。例子在X86的指令系統中,用第1,2個指令字來表示通用尋址,則這兩個字節組合成該表中的第0指令字,若某一種尋址方式中的某一個替換字符串使用組合指令字的第3位開始的9位,同時還使用后繼指令字的第2到第3位,則二進制碼組成字段中的值為00 00 00 00 00 00 00 00 00 00 00 00 0201 02 07 00 03h。
表6寄存器表 補充說明4 寄存器擴展編碼說明 該表中要對寄存器根據不同的匯編表達方式進行分類,并針對不同的類別進行編碼。將類別編碼放在擴展編碼字段,并將寄存器在指令中出現時的編碼寄存器編碼字段,不足部分使用0來補齊,由此形成對每一條記錄的唯一編碼(若在指令系統中不會發生寄存器的編碼重復的現象時,所有的寄存器的類別編碼都可以是00h) 例子Motorola 68000中對地址寄存器A3和數據寄存器D3在指令中出現時都用的是編碼011,為了進行區分將數據寄存器的類別碼編為00h,故在寄存器表中D3的編碼為000000003h,而將地址寄存器類別碼編碼為01h,故在寄存器表中A3的編碼為0100000003h。
表7代碼字符轉換表 表8中斷向量信息表 補充說明5 A.中斷向量類型編碼 使用一個字節來對中斷向量的類型進行編碼。各種處理器的中斷向量有三種類型,分別對其編碼如下 00h無效的中斷向量。
01h中斷向量是中斷處理程序的起始地址,并且所有的內容只是地址,如8086的中斷向量。
02h中斷向量地址處就是中斷處理程序的起始。
03h中斷向量的內容不僅僅是中斷處理程序的入口地址,還包括其它有關中斷處理程序的信息,如ALPHA的中斷向量表。
04h表示8086的中斷向量,中斷向量地址=段地址×16+偏移量 B.中斷向量組成指示字 表示在當前的中斷向量中,那些位組成了中斷處理程序的入口地址,并且按照位的高低關系將分布在中斷向量中不同位置的二進制代碼組合成入口地址。每個部分用3個字節表示,最高字節表示的是該部分以位為單位的長度,中間字節表示的是確定的字節編號,最后的字節表示的是在某一個字節中該部分的起始位置,即通過這三個字節定位該部分在指令二進制編碼中的位置。預留30個字節來表示最多10個組成部分,若高字節為0,表示這兩個字節中的內容無效。
表9特征信息表 表10處理器封裝類型表 本發明的有益效果 1、本發明通過對不同型號處理器體系結構及指令系統特征的分析和綜合,提出一種能夠將靜態描述表擴展成統一表示主流處理器的處理器結構特征庫和指令系統描述模板,以便用于通用的匯編和反匯編模塊,實現對未知指令系統的編譯工作,這樣一來,只需提供開放式的處理器信息數據庫,通過對該處理器信息數據庫進行管理和維護,分析工具也就具備了用戶可擴展性。
2、本發明采用多層三元組嵌套表Table構建處理器結構特征庫和指令系統描述模板,多層三元組嵌套表Table表示為{<Tp1,Ts1,Ti1>,<Tp2,Ts2,Ti2>,……,<Tpn,Tsn,Tin>},每個三元組<Tpn,Tsn,Tin>代表一款處理器,處理器標識信息表Tp對處理器進行分類、索引和篩選,處理器結構信息表Ts提供寄存器結構信息、中斷結構信息、復位地址信息和存儲空間分配信息,處理器的指令系統表Ti提供機器編碼、匯編表達式和兩者之間的映射關系,這種有序的表示方式有利于提高匯編和反匯編模塊的編譯效率。
具體實施例方式 實施例一 處理器標識信息表Tp含有處理器分類信息表和處理器封裝類型表。
處理器分類信息表含有處理器編號(1)、處理器名(8086)、處理器類型(mpu)、處理器生產廠家(Intel)、處理器系列號(8086)、處理器位數(16)、封裝類型(DIP); 處理器封裝類型表含有處理器編號(1)、封裝引腳編碼(1)、引腳數(40)、封裝名稱(無)。
處理器結構信息表Ts含有指令基本信息表、寄存器信息表、中斷結構表、存儲空間配置表、處理器復位地址表。
指令基本信息表含有指令條數(163)、基本的指令字寬(8)、最小指令長度(8)、最大指令長度(無)、指令操作數最大個數(2); 寄存器信息表表示為<TREG1,TREG2,……,TREGk>,其中k為大于等于1的自然數,其中一個TREGk含有寄存器名(AH)、寄存器的長度(8)、寄存器編碼(4)、寄存器擴展編碼(2); 中斷結構表含有中斷向量數(5)、中斷向量長度(32)、中斷向量表基地址(0000000000000000)、是否為浮動中斷向量表(否)、中斷向量表是否有效(是)、中斷向量表,中斷向量表表示為<INTADD1,INTADD2,……,INTADDr>,其中r為大于等于1的自然數,任一個INTADDr含有中斷向量號(0)、中斷向量地址(0000000000000000)、中斷類型(1)、中斷向量組成指示字(無)、中斷功能(除法錯中斷); 存儲空間配置表表示為<空間配置信息表、空間分配表1,……,空間分配表m>,其中m為大于等于1的自然數,所述空間配置信息表含有數據總線寬度(16)、地址總線寬度(20)、存儲器編址方式(字節編址)、可尋址的存儲器大小(16)、內部存儲空間最大容量(1048576)、外部存儲空間最大容量(524280)、內部存儲空間分段數(4)、外部存儲空間分段數(無)、內部端口數量(無)、內部端口寬度(無)、外部端口數量(無)、外部端口寬度(無),任一空間分配表m含有子存儲空間名(存儲器)、子存儲空間起始地址(0000000000000000)、子空間大小(1048576); 處理器復位地址表表示為<處理器復位入口地址1(00000000000FFFF0)>; 處理器的指令系統表Ti含有指令的機器編碼、匯編表達和從機器編碼到匯編表達的映射關系。
指令的機器編碼表示為<機器碼字段1,機器碼字段2>,機器碼字段1含有第1指令字二進制編碼(55)、第1指令字掩碼(255)、可變部分相關二進制碼位置,機器碼字段2含有第2指令字二進制編碼(0)、第2指令字掩碼(0)、可變部分相關二進制碼位置; 匯編表達表示為<匯編符字段1>,匯編符字段1含有指令匯編符(AAA)、替換字符串1的二進制編碼(無)、細分類別碼1(無)。
表1處理器分類信息表 處理器編號1;處理器名8086;處理器類型mpu; 處理器生產廠家Intel;處理器系列號8086;處理器位數16; 封裝類型DIP; 表2處理器基本結構信息表 指令條數163; 基本的指令字寬8;最小指令長度8; 最大指令長度NULL;指令操作數最大個數2;中斷向量數5; 中斷向量長度32; 中斷向量表基地址0000000000000000; 是否為浮動中斷向量表0(代表否); 中斷向量表是否有效1(代表是); 數據總線寬度16; 地址總線寬度20;可尋址的存儲器大小16; 存儲器編址方式8(字節編址); 內部存儲空間最大容量1048576; 內部存儲空間分段數4; 外部存儲空間最大容量524280; 外部存儲空間分段數NULL;內部端口數量NULL; 內部端口寬度NULL; 外部端口數量NULL; 外部端口寬度NULL;處理器復位入口地址100000000000FFFF0; 處理器復位入口地址2NULL; 處理器復位入口地址3NULL; 處理器復位入口地址4NULL; 處理器復位入口地址5NULL; 處理器復位入口地址6NULL; 處理器復位入口地址7NULL; 處理器復位入口地址8NULL; 表3存儲空間分配表 子存儲空間名存儲器; 子存儲空間起始地址0000000000000000; 子空間大小1048576; 表4指令系統信息表 指令匯編符AAA; 第1指令字二進制編碼55; 第1指令字掩碼255; 第2指令字二進制編碼0; 第2指令字掩碼0; 第3指令字二進制編碼NULL; 第3指令字掩碼NULL; 第4指令字二進制編碼NULL; 第4指令字掩碼NULL; 第5指令字二進制編碼NULL; 第5指令字掩碼NULL; 第6指令字二進制編碼NULL; 第6指令字掩碼NULL; 第7指令字二進制編碼NULL 第7指令字掩碼NULL; 第8指令字二進制編碼NULL; 第8指令字掩碼NULL; 替換字符串1的二進制碼NULL; 細分類別碼1NULL;替換字符串2的二進制碼NULL; 細分類別碼2NULL;………… 替換字符串16的二進制碼NULL;細分類別碼16NULL; 表5通用尋址類型表 替換字符串1的二進制碼NULL;細分類別碼1NULL; ………… 替換字符串8的二進制碼NULL;細分類別碼8NULL; 表6寄存器表 寄存器擴展編碼2; 寄存器編碼4; 寄存器名AH; 寄存器映射方式NULL;寄存器的長度8; 表8中斷向量信息表 中斷向量號0; 中斷向量地址0000000000000000; 中斷類型1; 中斷向量類型4;中斷向量組成指示字NULL; 中斷向量長度32;中斷功能除法錯中斷; 表10處理器封裝類型表 封裝引腳編碼1; 引腳數40;封裝名稱NULL; 實施例二 處理器標識信息表Tp含有處理器分類信息表和處理器封裝類型表。處理器分類信息表含有處理器編號(2)、處理器名(MC68000)、處理器類型(mcu)、處理器生產廠家(Motorola)、處理器系列號(68030)、處理器位數(32)、封裝類型(FC); 處理器封裝類型表含有處理器編號(2)、封裝引腳編碼(1)、引腳數(132)、封裝名稱(FC)。
處理器結構信息表Ts含有指令基本信息表、寄存器信息表、中斷結構表、存儲空間配置表、處理器復位地址表。
指令基本信息表含有指令條數(102)、基本的指令字寬(16)、最小指令長度(16)、最大指令長度(80)、指令操作數最大個數(無); 寄存器信息表表示為<TREG1,TREG2,……,TREGk>,其中k為大于等于1的自然數,其中一個TREGk含有寄存器名(D0)、寄存器的長度(32)、寄存器編碼(0)、寄存器擴展編碼(12); 中斷結構表含有中斷向量數(256)、中斷向量長度(32)、中斷向量表基地址(無)、是否為浮動中斷向量表(是)、中斷向量表是否有效(是)、中斷向量表,中斷向量表表示為<INTADD1,INTADD2,……,INTADDr>,其中r為大于等于1的自然數,任一個INTADDr含有中斷向量號(0)、中斷向量地址(0000000000000000)、中斷類型(0)、中斷向量組成指示字(無)、中斷功能(復位內部堆棧指針); 存儲空間配置表表示為<空間配置信息表、空間分配表1,……,空間分配表m>,其中m為大于等于1的自然數,所述空間配置信息表含有數據總線寬度(16)、地址總線寬度(32)、存儲器編址方式(字節編址)、可尋址的存儲器大小(無)、內部存儲空間最大容量(無)、外部存儲空間最大容量(無)、內部存儲空間分段數(無)、外部存儲空間分段數(無)、內部端口數量(無)、內部端口寬度(無)、外部端口數量(無)、外部端口寬度(無),任一空間分配表m含有子存儲空間名(管理程序空間)、子存儲空間起始地址(0000000000000000)、子空間大小(無); 處理器復位地址表表示為<處理器復位入口地址1(0000000000000000),處理器復位入口地址2(0000000000000004)>; 處理器的指令系統表Ti含有指令的機器編碼、匯編表達和從機器編碼到匯編表達的映射關系。
指令的機器編碼表示為<機器碼字段1,機器碼字段2>,機器碼字段1含有第1指令字二進制編碼(49408)、第1指令字掩碼(61944)、可變部分相關二進制碼位置,機器碼字段2含有第2指令字二進制編碼(0)、第2指令字掩碼(0)、可變部分相關二進制碼位置; 匯編表達表示為<匯編符字段1,匯編符字段2>,匯編符字段1含有指令匯編符(ABCD<d1>,<e1>)、替換字符串1的二進制編碼(000000000000000000000000000000030000)、細分類別碼1(12),匯編符字段2含有指令匯編符(ABCD<d1>,<e1>)、替換字符串2的二進制編碼(000000000000000000000000000000030009)、細分類別碼2(12)。
表1處理器分類信息表 處理器編號2; 處理器名MC68000;處理器類型mcu; 處理器生產廠家Motorola; 處理器系列號68030; 處理器位數32; 封裝類型FC; 表2處理器基本結構信息表 指令條數102;基本的指令字寬16; 最小指令長度16; 最大指令長度80; 指令操作數最大個數NULL; 中斷向量數256; 中斷向量長度32; 中斷向量表基地址NULL; 是否為浮動中斷向量表1(代表是); 中斷向量表是否有效1(代表是); 數據總線寬度16;地址總線寬度32; 可尋址的存儲器大小NULL; 存儲器編址方式8(字節編址); 內部存儲空間最大容量NULL; 內部存儲空間分段數NULL; 外部存儲空間最大容量NULL; 外部存儲空間分段數NULL; 內部端口數量NULL; 內部端口寬度NULL;外部端口數量NULL; 外部端口寬度NULL;處理器復位入口地址10000000000000000; 處理器復位入口地址20000000000000004; 處理器復位入口地址3NULL; 處理器復位入口地址4NULL; 處理器復位入口地址5NULL; 處理器復位入口地址6NULL; 處理器復位入口地址7NULL; 處理器復位入口地址8NULL; 表3存儲空間分配表 子存儲空間名管理程序空間;子存儲空間起始地址0000000000000000;子空間大小NULL; 表4指令系統信息表 指令匯編符ABCD<d1>,<e1>;第1指令字二進制編碼49408; 第1指令字掩碼61944; 第2指令字二進制編碼0; 第2指令字掩碼0; 第3指令字二進制編碼NULL; 第3指令字掩碼NULL; 第4指令字二進制編碼NULL; 第4指令字掩碼NULL; 第5指令字二進制編碼NULL; 第5指令字掩碼NULL; 第6指令字二進制編碼NULL; 第6指令字掩碼NULL; 第7指令字二進制編碼NULL; 第7指令字掩碼NULL; 第8指令字二進制編碼NULL; 第8指令字掩碼NULL; 替換字符串1的二進制碼000000000000000000000000000000030000; 細分類別碼112; 替換字符串2的二進制碼000000000000000000000000000000030009; 細分類別碼212; ………… 替換字符串16的二進制碼NULL;細分類別碼16NULL; 表5通用尋址類型表 替換字符串1的二進制碼000000000000000000000000000000030000; 細分類別碼112;………… 替換字符串8的二進制碼NULL;細分類別碼8NULL; 表6寄存器表 寄存器擴展編碼12; 寄存器編碼0; 寄存器名D0; 寄存器映射方式NULL;寄存器的長度32; 表8中斷向量信息表 中斷向量號0; 中斷向量地址0000000000000000; 中斷類型0; 中斷向量類型1; 中斷向量組成指示字NULL;中斷向量長度32; 中斷功能復位內部堆棧指針; 表10處理器封裝類型表 封裝引腳編碼1;引腳數132;封裝名稱FC; 實施例三 處理器標識信息表Tp含有處理器分類信息表和處理器封裝類型表。處理器分類信息表含有處理器編號(3)、處理器名(TMS320c5x)、處理器類型(dsp)、處理器生產廠家(Texas Instruments)、處理器系列號(C52)、處理器位數(16)、封裝類型(QFP); 處理器封裝類型表含有處理器編號(3)、封裝引腳編碼(1)、引腳數(100)、封裝名稱(QFP)。
處理器結構信息表Ts含有指令基本信息表、寄存器信息表、中斷結構表、存儲空間配置表、處理器復位地址表。
指令基本信息表含有指令條數(133)、基本的指令字寬(16)、最小指令長度(16)、最大指令長度(32)、指令操作數最大個數(無); 寄存器信息表表示為<TREG1,TREG2,……,TREGk>,其中k為大于等于1的自然數,其中一個TREGk含有寄存器名(AR0)、寄存器的長度(16)、寄存器編碼(0)、寄存器擴展編碼(8); 中斷結構表含有中斷向量數(64)、中斷向量長度(16)、中斷向量表基地址(無)、是否為浮動中斷向量表(是)、中斷向量表是否有效(是)、中斷向量表,中斷向量表表示為<INTADD1,INTADD2,……,INTADDr>,其中r為大于等于1的自然數,任一個INTADDr含有中斷向量號(0)、中斷向量地址(0000000000000000)、中斷類型(0)、中斷向量組成指示字(無)、中斷功能(外部不可屏蔽的復位中斷); 存儲空間配置表表示為<空間配置信息表、空間分配表1,……,空間分配表m>,其中m為大于等于1的自然數,所述空間配置信息表含有數據總線寬度(16)、地址總線寬度(16)、存儲器編址方式(字編址)、可尋址的存儲器大小(無)、內部存儲空間最大容量(0)、外部存儲空間最大容量(無)、內部存儲空間分段數(無)、外部存儲空間分段數(無)、內部端口數量(無)、內部端口寬度(無)、外部端口數量(無)、外部端口寬度(無),任一空間分配表m含有子存儲空間名(用戶數據空間)、子存儲空間起始地址(無)、子空間大小(無); 處理器復位地址表表示為<處理器復位入口地址1(0000000000000000)>; 處理器的指令系統表Ti含有指令的機器編碼、匯編表達和從機器編碼到匯編表達的映射關系。
指令的機器編碼表示為<機器碼字段1,機器碼字段2>,機器碼字段1含有第1指令字二進制編碼(49416)、第1指令字掩碼(61944)、可變部分相關二進制碼位置,機器碼字段2含有第2指令字二進制編碼(0)、第2指令字掩碼(0)、可變部分相關二進制碼位置; 匯編表達表示為<匯編符字段1,匯編符字段2>,匯編符字段1含有指令匯編符(ABCD-(<d1>),-(<e1>))、替換字符串1的二進制編碼(000000000000000000000000000000030000)、細分類別碼1(13),匯編符字段2含有指令匯編符(ABCD-(<d1>),-(<e1>))、替換字符串2的二進制編碼(000000000000000000000000000000030009)、細分類別碼2(13)。
表1處理器分類信息表 處理器編號3; 處理器名TMS320c5x; 處理器類型dsp; 處理器生產廠家Texas Instruments;處理器系列號C52; 處理器位數16; 封裝類型QFP; 表2處理器基本結構信息表 指令條數133; 基本的指令字寬16;最小指令長度16; 最大指令長度32;指令操作數最大個數NULL; 中斷向量數64; 中斷向量長度16; 中斷向量表基地址NULL; 是否為浮動中斷向量表1(代表是); 中斷向量表是否有效1(代表是); 數據總線寬度16; 地址總線寬度16; 可尋址的存儲器大小NULL; 存儲器編址方式16(字編址); 內部存儲空間最大容量0; 內部存儲空間分段數NULL;外部存儲空間最大容量NULL; 外部存儲空間分段數NULL;內部端口數量NULL; 內部端口寬度NULL; 外部端口數量NULL; 外部端口寬度NULL; 處理器復位入口地址10000000000000000; 處理器復位入口地址2NULL; 處理器復位入口地址3NULL; 處理器復位入口地址4NULL; 處理器復位入口地址5NULL; 處理器復位入口地址6NULL; 處理器復位入口地址7NULL; 處理器復位入口地址8NULL; 表3存儲空間分配表 子存儲空間名用戶數據空間; 子存儲空間起始地址NULL; 子空間大小NULL; 表4指令系統信息表 指令匯編符ABCD-(<d1>),-(<e1>);第1指令字二進制編碼49416; 第1指令字掩碼61944;第2指令字二進制編碼0; 第2指令字掩碼0;第3指令字二進制編碼NULL; 第3指令字掩碼NULL; 第4指令字二進制編碼NULL; 第4指令字掩碼NULL; 第5指令字二進制編碼NULL; 第5指令字掩碼NULL; 第6指令字二進制編碼NULL; 第6指令字掩碼NULL; 第7指令字二進制編碼NULL; 第7指令字掩碼NULL; 第8指令字二進制編碼NULL; 第8指令字掩碼NULL; 替換字符串1的二進制碼000000000000000000000000000000030000; 細分類別碼113; 替換字符串2的二進制碼000000000000000000000000000000030009; 細分類別碼213;………… 替換字符串16的二進制碼NULL;細分類別碼16NULL; 表5通用尋址類型表 替換字符串1的二進制碼000000000000000000000000000000030004; 細分類別碼116;………… 替換字符串8的二進制碼NULL;細分類別碼8NULL; 表6寄存器表 寄存器擴展編碼8; 寄存器編碼0; 寄存器名AR0; 寄存器映射方式NULL;寄存器的長度16; 表8中斷向量信息表 中斷向量號0; 中斷向量地址0000000000000000; 中斷類型0; 中斷向量類型1; 中斷向量組成指示字NULL;中斷向量長度16; 中斷功能外部不可屏蔽的復位中斷; 表10處理器封裝類型表 封裝引腳編碼1;引腳數100;封裝名稱QFP。
權利要求
1、一種基于多維可變描述表的處理器結構與指令系統表示方法,其特征是采用多層三元組嵌套表Table構建處理器結構特征庫和指令系統描述模板,多層三元組嵌套表Table含有處理器標識信息表Tp、與Tp對應或匹配的處理器結構信息表Ts、與Tp對應或匹配的處理器的指令系統表Ti,多層三元組嵌套表Table表示為{<Tp1,Ts1,Ti1>,<Tp2,Ts2,Ti2>,......,<Tpn,Tsn,Tin>},其中n為大于等于1的自然數,每個三元組<Tpn,Tsn,Tin>代表一款處理器,處理器標識信息表Tp對處理器進行分類、索引和篩選,處理器結構信息表Ts提供寄存器結構信息、中斷結構信息、復位地址信息和存儲空間分配信息,處理器的指令系統表Ti提供機器編碼、匯編表達式和兩者之間的映射關系。
2、根據權利要求1所述的基于多維可變描述表的處理器結構與指令系統表示方法,其特征是所述多層三元組嵌套表Table中的數據從處理器信息數據庫中提取,對處理器信息數據庫可進行管理和維護,管理和維護含有登錄、數據錄入、數據查詢、數據修改、數據引用、數據輸出和系統維護。
3、根據權利要求2所述的基于多維可變描述表的處理器結構與指令系統表示方法,其特征是所述處理器信息數據庫含有處理器分類信息表、處理器基本結構信息表、存儲空間分配表、指令系統信息表、通用尋址類型表、寄存器表、代碼字符轉換表、中斷向量信息表、特征信息表、處理器封裝類型表。
4、根據權利要求1所述的基于多維可變描述表的處理器結構與指令系統表示方法,其特征是所述處理器標識信息表Tp含有處理器分類信息表和處理器封裝類型表,處理器分類信息表含有處理器編號、處理器名、處理器類型、處理器生產廠家、處理器系列號、處理器位數、封裝類型,處理器封裝類型表含有處理器編號、封裝引腳編碼、引腳數、封裝名稱。
5、根據權利要求1所述的基于多維可變描述表的處理器結構與指令系統表示方法,其特征是所述處理器結構信息表Ts含有指令基本信息表、寄存器信息表、中斷結構表、存儲空間配置表、處理器復位地址表。
6、根據權利要求5所述的基于多維可變描述表的處理器結構與指令系統表示方法,其特征是所述指令基本信息表含有指令條數、基本的指令字寬、最小指令長度、最大指令長度、指令操作數最大個數;
所述寄存器信息表表示為<TREG1,TREG2,......,TREGk>,其中k為大于等于1的自然數,任一個TREGk含有寄存器名、寄存器的長度、寄存器編碼、寄存器擴展編碼,每個TREGk代表一個寄存器;
所述中斷結構表含有中斷向量數、中斷向量長度、中斷向量表基地址、是否為浮動中斷向量表、中斷向量表是否有效、中斷向量表,所述中斷向量表表示為<INTADD1,INTADD2,......,INTADDr>,其中r為大于等于1的自然數,任一個INTADDr含有中斷向量號、中斷向量地址、中斷類型、中斷向量組成指示字、中斷功能;
所述存儲空間配置表表示為<空間配置信息表、空間分配表1,......,空間分配表m>,其中m為大于等于1的自然數,所述空間配置信息表含有數據總線寬度、地址總線寬度、存儲器編址方式、可尋址的存儲器大小、內部存儲空間最大容量、外部存儲空間最大容量、內部存儲空間分段數、外部存儲空間分段數、內部端口數量、內部端口寬度、外部端口數量、外部端口寬度,任一空間分配表m含有子存儲空間名、子存儲空間起始地址、子空間大小,每個空間分配表m對應一個存儲空間或IO空間;
所述處理器復位地址表表示為<處理器復位入口地址1,處理器復位入口地址2,......,處理器復位入口地址p>,其中p為大于等于1且小于等于8的自然數,處理器復位入口地址p是處理器目標代碼的初始入口地址。
7、根據權利要求1所述的基于多維可變描述表的處理器結構與指令系統表示方法,其特征是所述處理器的指令系統表Ti含有指令的機器編碼、匯編表達和從機器編碼到匯編表達的映射關系。
8、根據權利要求7所述的基于多維可變描述表的處理器結構與指令系統表示方法,其特征是所述指令的機器編碼表示為<機器碼字段1,機器碼字段2,......,機器碼字段q>,任一機器碼字段q含有第q指令字二進制編碼、第q指令字掩碼、可變部分相關二進制碼位置,其中q為大于等于1且小于等于8的自然數;
所述匯編表達表示為<匯編符字段1,匯編符字段2,......,匯編符字段s>,任一匯編符字段s含有指令匯編符、替換字符串s的二進制編碼、細分類別碼s,其中s為大于等于1且小于等于16的自然數;
從機器編碼到匯編表達的映射關系含有字符串映射、寄存器映射、數值映射;
字符串映射含有匯編字符串、機器二進制編碼、細分類型及編碼;寄存器映射含有寄存器名、寄存器編碼、寄存器擴展編碼;
數值映射根據替換字符串的類型直接完成數值轉換。
全文摘要
本發明涉及計算機軟件逆向分析領域,具體涉及一種基于多維可變描述表的處理器結構與指令系統表示方法;該方法采用多層三元組嵌套表Table構建處理器結構特征庫和指令系統描述模板,Table表示為{<Tp1,Ts1,Ti1>,<Tp2,Ts2,Ti2>,……,<Tpn,Tsn,Tin>},每個三元組<Tpn,Tsn,Tin>代表一款處理器,Tpn對處理器進行分類、索引和篩選,Tsn提供寄存器結構信息、中斷結構信息、復位地址信息和存儲空間分配信息,Tin提供機器編碼、匯編表達式和兩者之間的映射關系,Table中的數據從處理器信息數據庫中提取,對處理器信息數據庫可進行管理和維護;本發明通用性強,可用于現有的大多數處理器。
文檔編號G06F9/44GK101645005SQ200810140939
公開日2010年2月10日 申請日期2008年8月6日 優先權日2008年8月6日
發明者蔣烈輝, 青 尹, 何紅旗, 劉鐵銘, 費勤福, 謝耀濱, 吳金波, 亮 陳, 張有為, 張媛媛 申請人:中國人民解放軍信息工程大學