專(zhuān)利名稱(chēng):軟件保護(hù)裝置與計(jì)算機(jī)配合執(zhí)行cpu指令的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種計(jì)算機(jī)和軟件保護(hù)裝置配合執(zhí)行計(jì)算機(jī)CPU指令的方法。
背景技術(shù):
在使用可移植代碼的軟件保護(hù)裝置對(duì)軟件進(jìn)行保護(hù)時(shí),由于軟件保護(hù)裝置中的CPU和計(jì)算機(jī)CPU的體系結(jié)構(gòu)的差異,被保護(hù)軟件中待移植的代碼段并不能直接移植到軟件保護(hù)裝置中運(yùn)行,通常的做法是按照被移植代碼段的邏輯重新編寫(xiě)一段代碼,然后將其編譯成軟件保護(hù)裝置中能夠運(yùn)行的程序并下載到軟件保護(hù)裝置內(nèi),而且還要將原軟件中被移植的代碼段刪除,換成訪問(wèn)軟件保護(hù)裝置的代碼。這一系列操作非常耗時(shí),而且還要求有一定的技術(shù)能力。如果在軟件保護(hù)裝置內(nèi)設(shè)置一系列模塊來(lái)模擬計(jì)算機(jī)CPU指令的提取、解析、執(zhí)行以及I/o操作,這樣的一個(gè)軟件保護(hù)裝置就相當(dāng)于另一個(gè)計(jì)算機(jī)CPU,可以直接運(yùn)行為計(jì)算機(jī)CPU編譯的軟件中的指令。當(dāng)需要將軟件中被保護(hù)的代碼段移植到這樣的軟 件保護(hù)裝置中時(shí),可以直接將被保護(hù)的代碼拷貝到軟件保護(hù)裝置中即可,這樣比現(xiàn)有的保護(hù)方式更為方便、快捷,而且這一列操作完全可以由軟件自動(dòng)由完成,對(duì)操作人員的技術(shù)要求會(huì)大大降低。
發(fā)明內(nèi)容
本發(fā)明涉及一種軟件保護(hù)裝置與計(jì)算機(jī)配合執(zhí)行CPU指令的方法,所述軟件保護(hù)裝置中維護(hù)有模擬寄存器,其用于模擬計(jì)算機(jī)中寄存器的狀態(tài),所述軟件保護(hù)裝置還具有
I/o單元,用于在所述軟件保護(hù)裝置中模擬所述計(jì)算機(jī)對(duì)所述計(jì)算機(jī)中內(nèi)存的讀寫(xiě),以及在所述計(jì)算機(jī)與所述軟件保護(hù)裝置交換計(jì)算機(jī)運(yùn)行狀態(tài)時(shí),與所述計(jì)算機(jī)交互所有的狀態(tài)數(shù)據(jù);
指令解析單元,用于解析所述軟件保護(hù)裝置當(dāng)前正在模擬執(zhí)行的CPU指令;
控制單元,用于判斷所述當(dāng)前正在模擬執(zhí)行的CPU指令是否能在所述軟件保護(hù)裝置內(nèi)執(zhí)行;
指令執(zhí)行單元,用于模擬所述當(dāng)前正在模擬執(zhí)行的CPU指令的功能,改變所述軟件保護(hù)裝置中所述模擬寄存器的內(nèi)容;
所述計(jì)算機(jī)中包括
配合單元,用于與所述軟件保護(hù)裝置中的I/o模塊通信,控制所述計(jì)算機(jī)中的寄存器、內(nèi)存或端口以執(zhí)行所述CPU指令;
所述方法包括
步驟I:所述計(jì)算機(jī)把計(jì)算機(jī)中當(dāng)前寄存器數(shù)據(jù)發(fā)送到所述軟件保護(hù)裝置;
步驟2 :所述軟件保護(hù)裝置使用所述計(jì)算機(jī)發(fā)送過(guò)來(lái)的所述寄存器數(shù)據(jù)初始化所述軟件保護(hù)裝置中的各個(gè)對(duì)應(yīng)的模擬寄存器;步驟3 :所述軟件保護(hù)裝置獲取指令;
步驟4 :所述指令解析單元解析所述指令;
步驟5 :所述控制模塊根據(jù)解析結(jié)果判斷是否結(jié)束所述指令;如果結(jié)束,則所述計(jì)算機(jī)繼續(xù)執(zhí)行后續(xù)指令;
步驟6 :如果不結(jié)束,則所述控制模塊繼續(xù)判斷所述指令是否能被所述指令執(zhí)行單元執(zhí)行;如果無(wú)法執(zhí)行,則在所述計(jì)算機(jī)中執(zhí)行所述指令;如果能夠被所述指令執(zhí)行單元執(zhí)行,則由所述指令執(zhí)行單元執(zhí)行。根據(jù)本發(fā)明的一個(gè)方面,在步驟5中,如果結(jié)束指令,則發(fā)送所述軟件保護(hù)裝置內(nèi)各模擬寄存器的數(shù)據(jù)到所述計(jì)算機(jī),所述配合單元接受所述各模擬寄存器的數(shù)據(jù)并設(shè)置所述計(jì)算機(jī)中對(duì)應(yīng)的各個(gè)寄存器,然后由所述計(jì)算機(jī)繼續(xù)向下執(zhí)行。 根據(jù)本發(fā)明的一個(gè)方面,在步驟6中,如果所述指令無(wú)法被所述指令執(zhí)行模塊執(zhí)行,則所述控制模塊通過(guò)所述I/o模塊把所述軟件保護(hù)裝置的各模擬寄存器的數(shù)據(jù)發(fā)送到所述計(jì)算機(jī),再由所述計(jì)算機(jī)中的配合單元配合接受這些數(shù)據(jù)并設(shè)置所述計(jì)算機(jī)中對(duì)應(yīng)的各個(gè)寄存器,然后在所述計(jì)算機(jī)中執(zhí)行所述指令。根據(jù)本發(fā)明的一個(gè)方面,所述無(wú)法執(zhí)行的指令包括中斷指令或異常指令。
圖I是本發(fā)明應(yīng)用于x86架構(gòu)的CPU時(shí)所涉及到的各模塊示意圖。圖2是本發(fā)明應(yīng)用于x86架構(gòu)的CPU時(shí)軟件保護(hù)裝置執(zhí)行計(jì)算機(jī)指令時(shí)的流程圖。
具體實(shí)施例方式圖I是本發(fā)明所涉及到的軟件保護(hù)裝置和計(jì)算機(jī)中各模塊的示意圖。圖I中軟件保護(hù)裝置中的箭頭方向表示軟件保護(hù)裝置中執(zhí)行計(jì)算機(jī)指令時(shí)經(jīng)過(guò)各個(gè)模塊的流程,計(jì)算機(jī)中的箭頭方向表示計(jì)算機(jī)中的軟件模塊(也可稱(chēng)為配合單元)讀寫(xiě)計(jì)算機(jī)的寄存器、內(nèi)存或端口。首先,在軟件保護(hù)裝置中具有模擬寄存器(圖I中以“寄存器”表示),用于模擬計(jì)算機(jī)中寄存器,對(duì)應(yīng)地模擬出計(jì)算機(jī)的CPU中各個(gè)寄存器的狀態(tài)。軟件保護(hù)裝置中還具有I/O模塊,用于在軟件保護(hù)裝置中模擬計(jì)算機(jī)CPU對(duì)計(jì)算機(jī)中內(nèi)存的讀寫(xiě),其中包括讀寫(xiě)數(shù)據(jù)和讀取指令。另外,在計(jì)算機(jī)與軟件保護(hù)裝置交換計(jì)算機(jī)運(yùn)行狀態(tài)時(shí),所有的狀態(tài)數(shù)據(jù)也通過(guò)I/o模塊與計(jì)算機(jī)交互。此外,根據(jù)本發(fā)明的一個(gè)實(shí)施例,還可以采用緩存技術(shù)來(lái)提高軟件保護(hù)裝置對(duì)計(jì)算機(jī)內(nèi)存讀寫(xiě)的效率,而這種緩存技術(shù)的應(yīng)用則由I/o模塊實(shí)現(xiàn)。具體而言,對(duì)于內(nèi)存的操作,為了提高效率,可采用緩存技術(shù)來(lái)維護(hù)軟件保護(hù)裝置內(nèi)的計(jì)算機(jī)內(nèi)存部分。舉例而言,當(dāng)某條計(jì)算機(jī)指令要訪問(wèn)的內(nèi)存地址在軟件保護(hù)裝置維護(hù)的內(nèi)存地址范圍之內(nèi)時(shí),則直接操作;否則,先把軟件保護(hù)裝置當(dāng)前維護(hù)的計(jì)算機(jī)內(nèi)存寫(xiě)回計(jì)算機(jī),再?gòu)挠?jì)算機(jī)讀取上述內(nèi)存地址所在的范圍的一塊內(nèi)存到軟件保護(hù)裝置,替換當(dāng)前維護(hù)的這段內(nèi)存,然后再進(jìn)行操作,而不用把控制權(quán)交給計(jì)算機(jī)執(zhí)行。此外,根據(jù)本發(fā)明的一個(gè)實(shí)施例,由軟件保護(hù)裝置的I/o模塊與計(jì)算機(jī)中的配合單元(即圖I中的計(jì)算機(jī)內(nèi)的軟件模塊)配合,直接讀寫(xiě)計(jì)算機(jī)的內(nèi)存。軟件保護(hù)裝置中還具有指令解析模塊,用于解析軟件保護(hù)裝置當(dāng)前正在模擬執(zhí)行的CPU指令。根據(jù)本發(fā)明的一個(gè)實(shí)施例,指令解析模塊對(duì)當(dāng)前正在模擬執(zhí)行的CPU指令進(jìn)行解析,從而正確識(shí)別出當(dāng)前指令所要實(shí)現(xiàn)的功能。軟件保護(hù)裝置中還具有控制模塊,用于判斷當(dāng)前指令是否能在軟件保護(hù)裝置內(nèi)執(zhí)行。根據(jù)本發(fā)明,判斷的依據(jù)條件可以是多樣的。根據(jù)本發(fā)明的一個(gè)實(shí)施例,例如判斷當(dāng)前指令是否要操作軟件保護(hù)裝置維護(hù)的計(jì)算機(jī)狀態(tài)范圍之外的數(shù)據(jù)。另外,還可以通過(guò)一些自定義的條件來(lái)判斷是否應(yīng)該在軟件保護(hù)裝置內(nèi)執(zhí)行。例如某一段地址范圍內(nèi)的指令需要多次地循環(huán)執(zhí)行,如果在軟件保護(hù)裝置內(nèi)執(zhí)行需要消耗較長(zhǎng)的時(shí)間而影響性能,則可以通過(guò)控制模塊判斷當(dāng)前指令是否在此范圍內(nèi)來(lái)決定是否需要切換到計(jì)算機(jī)來(lái)執(zhí)行。根據(jù)本發(fā)明的一個(gè)實(shí)施例,對(duì)于特定架構(gòu)的CPU也可以添加不同的判斷條件,例如對(duì)于x86架構(gòu)的CPU而言,控制模塊還需要判斷當(dāng)前指令是否是中斷指令或是否會(huì)引發(fā)異常,對(duì)于x86的中斷和異常需要跳轉(zhuǎn)到中斷處理程序和異常處理程序,所以需要將控制 權(quán)交回計(jì)算機(jī),由計(jì)算機(jī)處理完中斷或異常后再切換回軟件保護(hù)裝置繼續(xù)執(zhí)行。軟件保護(hù)裝置中還具有指令執(zhí)行模塊,用于模擬當(dāng)前指令的功能,改變軟件保護(hù)裝置維護(hù)的計(jì)算機(jī)狀態(tài),即模擬寄存器的內(nèi)容。在軟件保護(hù)裝置內(nèi)模擬出計(jì)算機(jī)運(yùn)行狀態(tài),即模擬計(jì)算機(jī)CPU的各個(gè)寄存器的狀態(tài)。根據(jù)本發(fā)明的一個(gè)實(shí)施例,計(jì)算機(jī)的運(yùn)行狀態(tài)包括的內(nèi)容決定于CPU的架構(gòu),例如使用x86架構(gòu)CPU的計(jì)算機(jī),其運(yùn)行狀態(tài)包括寄存器數(shù)據(jù)、內(nèi)存數(shù)據(jù)和計(jì)算機(jī)端口數(shù)據(jù)。軟件保護(hù)裝置中的模擬寄存器能夠模擬計(jì)算機(jī)中寄存器的狀態(tài),通過(guò)在軟件保護(hù)裝置中維護(hù)若干個(gè)變量即可模擬計(jì)算機(jī)CPU的各對(duì)應(yīng)寄存器。至于內(nèi)存,由于軟件保護(hù)裝置容量的限制,只能模擬計(jì)算機(jī)內(nèi)存的一小部分,當(dāng)然也可以不對(duì)內(nèi)存進(jìn)行維護(hù),對(duì)內(nèi)存的操作完全由軟件保護(hù)裝置的I/O模塊和計(jì)算機(jī)的軟件模塊配合,直接讀寫(xiě)計(jì)算機(jī)的內(nèi)存。對(duì)于內(nèi)存方面的操作,為了提高效率,可以采用緩存技術(shù)來(lái)維護(hù)軟件保護(hù)裝置內(nèi)的計(jì)算機(jī)內(nèi)存部分,即當(dāng)某條計(jì)算機(jī)指令要訪問(wèn)的內(nèi)存地址在軟件保護(hù)裝置維護(hù)的內(nèi)存地址范圍之內(nèi)時(shí)則直接操作,否則先把軟件保護(hù)裝置當(dāng)前維護(hù)的計(jì)算機(jī)內(nèi)存寫(xiě)回計(jì)算機(jī),再?gòu)挠?jì)算機(jī)讀取上述內(nèi)存地址所在的范圍的一塊內(nèi)存到軟件保護(hù)裝置,替換當(dāng)前維護(hù)的這段內(nèi)存,然后再進(jìn)行操作,而不用把控制權(quán)交還給計(jì)算機(jī)來(lái)執(zhí)行。當(dāng)然,軟件保護(hù)裝置不可能完全模擬計(jì)算機(jī)的運(yùn)行狀態(tài),根據(jù)本發(fā)明的一個(gè)實(shí)施例,以x86架構(gòu)的CPU為例,軟件保護(hù)裝置只能模擬計(jì)算機(jī)CPU的寄存器數(shù)據(jù)和部分內(nèi)存數(shù)據(jù),無(wú)法模擬全部?jī)?nèi)存和計(jì)算機(jī)端口的狀態(tài)。根據(jù)本發(fā)明的一個(gè)實(shí)施例,以x86架構(gòu)為例,軟件保護(hù)裝置無(wú)法模擬狀態(tài)的CPU指令包括中斷指令、異常指令等。對(duì)于本領(lǐng)域的技術(shù)人員而言,對(duì)于不同架構(gòu)的CPU有不同的無(wú)法模擬的指令。對(duì)于無(wú)法模擬狀態(tài)的CPU指令,則可以通過(guò)交換運(yùn)行狀態(tài)的方法,將控制權(quán)交給計(jì)算機(jī)來(lái)執(zhí)行,執(zhí)行完畢后再交換回軟件保護(hù)裝置繼續(xù)執(zhí)行。根據(jù)本發(fā)明的一個(gè)實(shí)施例,這種交換運(yùn)行狀態(tài)的方法包括,通過(guò)軟件保護(hù)裝置的I/o模塊和計(jì)算機(jī)中的軟件模塊之間的配合實(shí)現(xiàn)計(jì)算機(jī)CPU各寄存器與軟件保護(hù)裝置內(nèi)維護(hù)的各對(duì)應(yīng)寄存器之間的數(shù)據(jù)交換,這樣來(lái)實(shí)現(xiàn)計(jì)算機(jī)和軟件保護(hù)裝置運(yùn)行狀態(tài)的交換。計(jì)算機(jī)中具有配合單元,即與軟件保護(hù)裝置配合工作的模塊(S卩(圖I中的“計(jì)算機(jī)內(nèi)的軟件模塊”)。計(jì)算機(jī)內(nèi)的配合單元的功能為配合軟件保護(hù)裝置的I/o模塊實(shí)現(xiàn)軟件保護(hù)裝置與計(jì)算機(jī)的狀態(tài)切換,或者對(duì)計(jì)算機(jī)內(nèi)存進(jìn)行讀寫(xiě)操作。如果使用了上述的緩存技術(shù),也需要此模塊配合軟件保護(hù)裝置的I/o模塊來(lái)實(shí)現(xiàn)。計(jì)算機(jī)內(nèi)的軟件模塊的工作方式為循環(huán)檢測(cè)軟件保護(hù)裝置發(fā)送到計(jì)算機(jī)的各種預(yù)先定義好的各種命令,根據(jù)不同的命令協(xié)助軟件保護(hù)裝置執(zhí)行不同的操作,例如對(duì)內(nèi)存的讀寫(xiě)、對(duì)端口的讀寫(xiě)或者交換各寄存器的數(shù)據(jù)等。軟件保護(hù)裝置與計(jì)算機(jī)配合工作時(shí),當(dāng)需要提取指令時(shí),如果指令在軟件保護(hù)裝置中,則由軟件保護(hù)裝置的I/o模塊直接提?。蝗绻噶钤谟?jì)算機(jī)內(nèi)存中,則由軟件保護(hù)裝置的I/o模塊與計(jì)算機(jī)中的配合單元(即圖I中的計(jì)算機(jī)內(nèi)的軟件模塊)配合提取。然后由I/o模塊將提取出的指令發(fā)送給指令解析模塊進(jìn)行解析。指令解析模塊完成指令解析后,根據(jù)解析結(jié)果,由控制模塊判斷是否要在軟件保護(hù)裝置內(nèi)執(zhí)行當(dāng)前指令。判斷的條件可以有多種,例如軟件保護(hù)裝置是否能夠執(zhí)行這條指令或者根據(jù)一些自定義條件判斷當(dāng)前指令是否應(yīng)該在軟件保護(hù)裝置內(nèi)執(zhí)行。如果不能在軟件保護(hù)裝置內(nèi)執(zhí)行,則通過(guò)I/o模塊和計(jì)算機(jī)軟件模塊配合,將軟件保護(hù)裝置當(dāng)前的運(yùn)行狀態(tài)交換到計(jì)算機(jī),由計(jì)算機(jī)來(lái)執(zhí)行這條指令;否則,則由軟件保護(hù)裝置中的指令執(zhí)行模塊執(zhí)行這條指令。指令的執(zhí)行結(jié)果就是對(duì)運(yùn)行 狀態(tài)的改變,運(yùn)行狀態(tài)包括寄存器、內(nèi)存和端口的數(shù)據(jù)內(nèi)容。其中軟件保護(hù)裝置內(nèi)維護(hù)了計(jì)算機(jī)中的寄存器,根據(jù)本發(fā)明的一個(gè)實(shí)施例,軟件保護(hù)裝置內(nèi)也可以維護(hù)一部分內(nèi)存數(shù)據(jù)。如果當(dāng)前指令的執(zhí)行結(jié)果只是改變了寄存器內(nèi)容或者改變的內(nèi)存數(shù)據(jù)在軟件保護(hù)裝置維護(hù)的內(nèi)存范圍內(nèi),則由I/o模塊直接改變軟件保護(hù)裝置維護(hù)的運(yùn)行狀態(tài);否則,由I/O模塊與計(jì)算機(jī)的軟件模塊配合來(lái)改變計(jì)算機(jī)的內(nèi)存或端口等運(yùn)行狀態(tài)。綜上所述,軟件保護(hù)裝置內(nèi)的I/O模塊、指令解析模塊、控制模塊、指令執(zhí)行模塊,配合計(jì)算機(jī)中的計(jì)算機(jī)軟件模塊,通過(guò)交換計(jì)算機(jī)的運(yùn)行狀態(tài)實(shí)現(xiàn)計(jì)算機(jī)與軟件保護(hù)裝置交互執(zhí)行計(jì)算機(jī)的CPU指令。具體而言,通過(guò)軟件保護(hù)裝置的I/O模塊和計(jì)算機(jī)中的軟件模塊的通信,實(shí)現(xiàn)計(jì)算機(jī)運(yùn)行狀態(tài)的交換,即計(jì)算機(jī)CPU各寄存器內(nèi)容的交換來(lái)交互執(zhí)行計(jì)算機(jī)指令。此方法適用于任意架構(gòu)的CPU,對(duì)于本領(lǐng)域的技術(shù)人員而言,根據(jù)上述X86構(gòu)架的實(shí)現(xiàn)方式,則可以對(duì)其他構(gòu)架形式的CPU指令實(shí)現(xiàn)類(lèi)似的處理流程。圖2是本發(fā)明提出的軟件保護(hù)裝置執(zhí)行計(jì)算機(jī)指令的流程圖,其中虛線左側(cè)部分是在軟件保護(hù)裝置內(nèi)進(jìn)行的操作,虛線右側(cè)部分是在計(jì)算機(jī)內(nèi)進(jìn)行的操作。整個(gè)過(guò)程首先從計(jì)算機(jī)發(fā)送寄存器數(shù)據(jù)到軟件保護(hù)裝置內(nèi)開(kāi)始,即步驟201開(kāi)始。步驟201 :計(jì)算機(jī)把當(dāng)前各寄存器數(shù)據(jù)發(fā)送到軟件保護(hù)裝置。具體發(fā)送哪些寄存器的數(shù)據(jù)要根據(jù)實(shí)際情況而定。根據(jù)本發(fā)明的一個(gè)實(shí)施例,對(duì)于32位的x86架構(gòu)CPU,如果軟件保護(hù)裝置只執(zhí)行x86的一般用途指令,即GPI (General Purpose Instructions),那么只需使用到 EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI、EFLAGS、EIP 和 CS、DS、SS、ES、FS、GS這些寄存器即可。上述過(guò)程中,由軟件保護(hù)裝置中I/O模塊接收由計(jì)算機(jī)中的軟件模塊發(fā)送過(guò)來(lái)的數(shù)據(jù),通過(guò)I/O模塊與計(jì)算機(jī)內(nèi)的軟件模塊的配合,實(shí)現(xiàn)計(jì)算機(jī)到軟件保護(hù)裝置以及軟件保護(hù)裝置到計(jì)算機(jī)之間的數(shù)據(jù)交換。步驟202 :軟件保護(hù)裝置使用計(jì)算機(jī)發(fā)送過(guò)來(lái)的各寄存器數(shù)據(jù)初始化軟件保護(hù)裝置內(nèi)維護(hù)的各個(gè)模擬寄存器。步驟203 :由軟件保護(hù)裝置的I/O模塊根據(jù)EIP所指示的指令地址獲取指令。如果軟件保護(hù)裝置內(nèi)保存了一段計(jì)算機(jī)指令,而且EIP指示的指令地址在軟件保護(hù)裝置保存的這段地址內(nèi),就直接從軟件保護(hù)裝置內(nèi)讀取這條指令,否則,通過(guò)I/O模塊與計(jì)算機(jī)軟件模塊的配合,從計(jì)算機(jī)的內(nèi)存中讀取這條指令。步驟204 :軟件保護(hù)裝置的指令解析模塊開(kāi)始解析當(dāng)前指令。根據(jù)本發(fā)明的一個(gè)實(shí)施例,解析指令即理解當(dāng)前指令為何種指令。步驟205 :完成指令解析后,由軟件保護(hù)裝置的控制模塊判斷是否應(yīng)該結(jié)束執(zhí)行,轉(zhuǎn)由計(jì)算機(jī)繼續(xù)向下執(zhí)行。根據(jù)本發(fā)明的一個(gè)實(shí)施例,以指令的地址為判斷條件,例如指令的地址超出了某個(gè)范圍便不再由軟件保護(hù)裝置來(lái)執(zhí)行。根據(jù)本發(fā)明的一個(gè)實(shí)施例,雖然以指令地址為判斷條件的話在解析指令之前就能夠進(jìn)行判斷,但是一般其他條件都需要首先對(duì)指令進(jìn)行解析,例如判斷當(dāng)前指令是否為中斷指令或是否會(huì)引發(fā)異常等,所以控制模塊放到了指令解析模塊之后。如果判斷結(jié)果為應(yīng)該結(jié)束,則發(fā)送軟件保護(hù)裝置內(nèi)各模擬寄存器的數(shù)據(jù)到計(jì)算機(jī),計(jì)算機(jī)內(nèi)的軟件模塊接受這些數(shù)據(jù)并設(shè)置計(jì)算機(jī)的對(duì)應(yīng)各寄存器,然后由計(jì)算機(jī)繼續(xù)向下執(zhí)行,即步驟208、209和210所示的內(nèi)容。步驟206 :如果當(dāng)前指令不符合結(jié)束條件,則控制模塊繼續(xù)判斷當(dāng)前指令是否能被軟件保護(hù)裝置的執(zhí)行指令模塊所執(zhí)行。對(duì)于一般的操作寄存器、內(nèi)存的指令,執(zhí)行模塊是可以執(zhí)行的,但是對(duì)于一些特殊指令,例如CPWD指令獲取CPU的信息、中斷指令、會(huì)引發(fā)異常的指令(如除O異常),軟件保護(hù)裝置內(nèi)的執(zhí)行模塊是無(wú)法執(zhí)行的。對(duì)于執(zhí)行模塊無(wú)法執(zhí)行的指令,控制模塊需要通過(guò)I/O模塊把軟件保護(hù)裝置的各模擬寄存器數(shù)據(jù)發(fā)送給計(jì)算機(jī),再由計(jì)算機(jī)中的軟件模塊配合接受這些數(shù)據(jù)并設(shè)置對(duì)應(yīng)的計(jì)算機(jī)的各寄存器,然后在計(jì)算機(jī)內(nèi)將當(dāng)前指令保存在一個(gè)固定的位置并執(zhí)行當(dāng)前指令,也就是步驟211、212和213所示的內(nèi)容。步驟207 :如果當(dāng)前指令通過(guò)了控制模塊的檢查,能夠被軟件保護(hù)裝置正常執(zhí)行,則由軟件保護(hù)裝置中的執(zhí)行模塊執(zhí)行這條指令。
如果當(dāng)前指令需要讀寫(xiě)寄存器,則直接對(duì)軟件保護(hù)裝置內(nèi)的模擬寄存器進(jìn)行讀與。如果要讀寫(xiě)內(nèi)存,則要判斷要讀寫(xiě)的內(nèi)存地址是否在軟件保護(hù)裝置保留的計(jì)算機(jī)內(nèi)存地址范圍內(nèi),如果是,則直接讀寫(xiě)軟件保護(hù)裝置內(nèi)保留的內(nèi)存即可,否則需要通過(guò)I/O模塊與計(jì)算機(jī)軟件模塊配合完成內(nèi)存的讀寫(xiě)。如果要讀寫(xiě)計(jì)算機(jī)端口則必須通過(guò)I/O模塊與計(jì)算機(jī)的軟件模塊配合完成。執(zhí)行完指令后再跳轉(zhuǎn)到步驟203獲取下一條指令,進(jìn)入下一次循環(huán)。步驟208 :判斷應(yīng)該結(jié)束執(zhí)行,則通過(guò)I/O模塊將軟件保護(hù)裝置中的模擬寄存器數(shù)據(jù)發(fā)送到計(jì)算機(jī)。步驟209 :計(jì)算機(jī)使用軟件保護(hù)裝置發(fā)送的數(shù)據(jù)設(shè)置計(jì)算機(jī)內(nèi)部的寄存器。步驟210 :計(jì)算機(jī)繼續(xù)向下執(zhí)行。步驟211 :判斷出當(dāng)前指令不能被軟件保護(hù)裝置的執(zhí)行指令模塊所執(zhí)行,則將軟件保護(hù)裝置中的模擬寄存器數(shù)據(jù)和當(dāng)前指令通過(guò)I/O模塊發(fā)送到計(jì)算機(jī);
步驟212 :計(jì)算機(jī)使用軟件保護(hù)裝置發(fā)送的數(shù)據(jù)設(shè)置寄存器;
步驟213 :計(jì)算機(jī)將當(dāng)前指令保存在一個(gè)固定位置并執(zhí)行當(dāng)前指令。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保 護(hù)范圍之內(nèi)。
權(quán)利要求
1.ー種軟件保護(hù)裝置與計(jì)算機(jī)配合執(zhí)行CPU指令的方法,所述軟件保護(hù)裝置中具有模擬寄存器,用于模擬與所述軟件保護(hù)裝置配合工作的計(jì)算機(jī)中寄存器的狀態(tài),其特征在于,所述軟件保護(hù)裝置還具有 I/o単元,用于在所述軟件保護(hù)裝置中模擬所述計(jì)算機(jī)對(duì)所述計(jì)算機(jī)中內(nèi)存的讀寫(xiě),以及在所述計(jì)算機(jī)與所述軟件保護(hù)裝置交換計(jì)算機(jī)運(yùn)行狀態(tài)時(shí),與所述計(jì)算機(jī)交互所有的狀態(tài)數(shù)據(jù); 指令解析単元,用于解析所述軟件保護(hù)裝置當(dāng)前正在模擬執(zhí)行的CPU指令; 控制單元,用于判斷所述當(dāng)前正在模擬執(zhí)行的CPU指令是否能在所述軟件保護(hù)裝置內(nèi)執(zhí)行; 指令執(zhí)行單元,用于模擬所述當(dāng)前正在模擬執(zhí)行的CPU指令的功能,改變所述軟件保護(hù)裝置中所述模擬寄存器的內(nèi)容; 所述計(jì)算機(jī)中包括 配合単元,用干與所述軟件保護(hù)裝置中的I/o模塊通信,控制所述計(jì)算機(jī)中的寄存器、內(nèi)存或端ロ以執(zhí)行所述CPU指令;并且所述配合単元與所述軟件保護(hù)裝置中的所述I/O單元配合工作,實(shí)現(xiàn)所述軟件保護(hù)裝置與所述計(jì)算機(jī)之間的運(yùn)行狀態(tài)的交互; 所述方法包括 步驟I:所述計(jì)算機(jī)把計(jì)算機(jī)中當(dāng)前寄存器數(shù)據(jù)發(fā)送到所述軟件保護(hù)裝置; 步驟2 :所述軟件保護(hù)裝置使用所述計(jì)算機(jī)發(fā)送過(guò)來(lái)的所述寄存器數(shù)據(jù)初始化所述軟件保護(hù)裝置中的各個(gè)對(duì)應(yīng)的模擬寄存器; 步驟3 :所述軟件保護(hù)裝置獲取指令; 步驟4 :所述指令解析単元解析所述指令; 步驟5 :所述控制模塊根據(jù)解析結(jié)果判斷是否結(jié)束所述指令;如果結(jié)束,則所述計(jì)算機(jī)繼續(xù)執(zhí)行后續(xù)指令; 步驟6 :如果不結(jié)束,則所述控制模塊繼續(xù)判斷所述指令是否能被所述指令執(zhí)行單元執(zhí)行;如果無(wú)法執(zhí)行,則在所述計(jì)算機(jī)中執(zhí)行所述指令;如果能夠被所述指令執(zhí)行單元執(zhí)行,則由所述指令執(zhí)行單元執(zhí)行。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,步驟5中,如果結(jié)束指令,則發(fā)送所述軟件保護(hù)裝置內(nèi)各模擬寄存器的數(shù)據(jù)到所述計(jì)算機(jī),所述配合単元接受所述各模擬寄存器的數(shù)據(jù)并設(shè)置所述計(jì)算機(jī)中對(duì)應(yīng)的各個(gè)寄存器,然后由所述計(jì)算機(jī)繼續(xù)向下執(zhí)行。
3.根據(jù)權(quán)利要求1-2所述的方法,其特征在于,在步驟6中,如果所述指令無(wú)法被所述指令執(zhí)行模塊執(zhí)行,則所述控制模塊通過(guò)所述I/O模塊把所述軟件保護(hù)裝置的各模擬寄存器的數(shù)據(jù)發(fā)送到所述計(jì)算機(jī),再由所述計(jì)算機(jī)中的配合単元配合接受這些數(shù)據(jù)并設(shè)置所述計(jì)算機(jī)中對(duì)應(yīng)的各個(gè)寄存器,然后在所述計(jì)算機(jī)中執(zhí)行所述指令。
4.根據(jù)權(quán)利要求1-3所述的方法,其特征在于,所述無(wú)法執(zhí)行的指令包括中斷指令或異常指令。
全文摘要
本發(fā)明使軟件保護(hù)裝置可以模擬計(jì)算機(jī)CPU的指令提取、解碼、執(zhí)行和I/O并且可以跟計(jì)算機(jī)進(jìn)行運(yùn)行狀態(tài)的交互。當(dāng)計(jì)算機(jī)把當(dāng)前的運(yùn)行狀態(tài)發(fā)送到軟件保護(hù)裝置時(shí),由軟件保護(hù)裝置運(yùn)行計(jì)算機(jī)CPU指令;當(dāng)軟件保護(hù)裝置把運(yùn)行狀態(tài)傳回計(jì)算機(jī)時(shí),由計(jì)算機(jī)繼續(xù)運(yùn)行,通過(guò)這樣的循環(huán)實(shí)現(xiàn)計(jì)算機(jī)與軟件保護(hù)裝置交互執(zhí)行計(jì)算機(jī)的CPU指令,并且這種方法適用于任意架構(gòu)的CPU。
文檔編號(hào)G06F12/08GK102760072SQ20121014581
公開(kāi)日2012年10月31日 申請(qǐng)日期2012年5月12日 優(yōu)先權(quán)日2012年5月12日
發(fā)明者不公告發(fā)明人 申請(qǐng)人:北京深思洛克軟件技術(shù)股份有限公司