本發(fā)明涉及計(jì)算機(jī)技術(shù)以及處理器技術(shù),尤其涉及一種擴(kuò)充指令的模擬方法和裝置。
背景技術(shù):
在處理器的升級(jí)和更新過(guò)程中,需要對(duì)二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充,從而形成了擴(kuò)充指令。在對(duì)處理器的指令集中的指令進(jìn)行擴(kuò)充之后,需要對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行,模擬執(zhí)行的內(nèi)容包括了對(duì)擴(kuò)充指令的模擬、對(duì)擴(kuò)充指令的驗(yàn)證等工作。
現(xiàn)有技術(shù)中,在對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行測(cè)試的時(shí)候,需要將多條測(cè)試代碼或者多條測(cè)試指令放置到擴(kuò)充指令的位置處,然后重新對(duì)二進(jìn)制可執(zhí)行程序的代碼程序進(jìn)行掃描,重新記錄二進(jìn)制可執(zhí)行程序的各指令的位置,然后執(zhí)行二進(jìn)制可執(zhí)行程序的所有指令,進(jìn)而對(duì)擴(kuò)充指令進(jìn)行測(cè)試。
然而現(xiàn)有技術(shù)中,由于多條測(cè)試代碼或者多條測(cè)試指令被放置到擴(kuò)充指令的位置處,從而會(huì)該改變二進(jìn)制可執(zhí)行程序中的指令條數(shù)以及地址,從而在對(duì)二進(jìn)制可執(zhí)行程序的各擴(kuò)充指令進(jìn)行測(cè)試之前,需要先對(duì)二進(jìn)制可執(zhí)行程序的代碼程序進(jìn)行掃描,再完成對(duì)各擴(kuò)充指令的測(cè)試過(guò)程,進(jìn)而增加了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行測(cè)試的時(shí)間,降低了測(cè)試的效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種擴(kuò)充指令的模擬方法和裝置,用以解決現(xiàn)有技術(shù)中在對(duì)二進(jìn)制可執(zhí)行程序的各擴(kuò)充指令進(jìn)行測(cè)試之前,需要先對(duì)二進(jìn)制可執(zhí)行程序的代碼程序進(jìn)行掃描,再完成對(duì)各擴(kuò)充指令的測(cè)試過(guò)程,進(jìn)而增加了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行測(cè)試的時(shí)間,降低了測(cè)試的效率的問(wèn)題。
本發(fā)明的一方面是提供一種擴(kuò)充指令的模擬方法,包括:
根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置,其中,所述用戶(hù)態(tài)軟中斷指令與二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令對(duì)應(yīng);
根據(jù)所述內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。
本發(fā)明的另一方面是提供一種擴(kuò)充指令的模擬裝置,包括:
確定模塊,用于根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置,其中,所述用戶(hù)態(tài)軟中斷指令與二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令對(duì)應(yīng);
執(zhí)行模塊,用于根據(jù)所述內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。
本發(fā)明的又一方面是提供一種擴(kuò)充指令的模擬裝置,包括:
測(cè)試子裝置,第一寄存器和第二寄存器,其中,測(cè)試子裝置分別與所述第一寄存器和所述第二寄存器連接;
所述測(cè)試子裝置包括:指令集模擬器和處理器;
所述指令集模擬器,用于將二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令替換為用戶(hù)態(tài)軟中斷指令;
所述處理器,用于在根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至所述用戶(hù)態(tài)軟中斷指令時(shí),根據(jù)第一寄存器中存儲(chǔ)的指令集模擬器的內(nèi)存位置,確定所述指令集模擬器,其中,所述指令集模擬器包括與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序;
所述指令集模擬器,還用于在確定所述指令集模擬器之后,調(diào)取并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。本發(fā)明通過(guò)根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置,其中,用戶(hù)態(tài)軟中斷指令與二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令對(duì)應(yīng);根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。從而由于各擴(kuò)充指令已被替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù),就可以對(duì)二進(jìn)制可執(zhí)行程序進(jìn)行模擬執(zhí)行,進(jìn)而不會(huì)導(dǎo)致二進(jìn)制可執(zhí)行程序中的各指令的地址發(fā)生變化,無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序重新進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例一提供的擴(kuò)充指令的模擬方法的流程圖;
圖2為本發(fā)明實(shí)施例二提供的擴(kuò)充指令的模擬方法的流程圖;
圖3為本發(fā)明實(shí)施例三提供的擴(kuò)充指令的模擬裝置的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例四提供的擴(kuò)充指令的模擬裝置的結(jié)構(gòu)示意圖;
圖5為本發(fā)明實(shí)施例五提供的擴(kuò)充指令的模擬方法的流程圖;
圖6為本發(fā)明實(shí)施例六提供的擴(kuò)充指令的模擬方法的流程圖;
圖7為本發(fā)明實(shí)施例七提供的擴(kuò)充指令的模擬裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例一提供的擴(kuò)充指令的模擬方法的流程圖,如圖1所示,本實(shí)施例的方法包括:
步驟101、根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置,其中,用戶(hù)態(tài)軟中斷指令與二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令對(duì)應(yīng)。
在本實(shí)施例中,具體的,在處理器的升級(jí)和更新過(guò)程中,需要對(duì)處理器中的二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充,處理器中包括了多個(gè)二進(jìn)制可執(zhí)行程序,每一個(gè)二進(jìn)制可執(zhí)行程序中包括了多條指令。將二進(jìn)制可執(zhí)行程序中的擴(kuò)充后的指令稱(chēng)為擴(kuò)充指令。在對(duì)處理器的二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充之后,需要對(duì)二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行測(cè)試。
將處理器的二進(jìn)制可執(zhí)行程序進(jìn)行備份之后,由于已經(jīng)將二進(jìn)制可執(zhí)行程序中的各擴(kuò)充指令分別對(duì)應(yīng)了各自的指令模擬程序,且各指令模擬程序并沒(méi)有放入到二進(jìn)制可執(zhí)行程序中,而是將與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序放入到了內(nèi)存中,從而與各擴(kuò)充指令分別一一對(duì)應(yīng)的指令模擬程序是具有內(nèi)存位置的。此時(shí),由于每一條擴(kuò)充指令已經(jīng)被替換為每一條用戶(hù)態(tài)軟中斷指令,從而二進(jìn)制可執(zhí)行程序中的指令條數(shù),以及二進(jìn)制可執(zhí)行程序的各指令的地址都不會(huì)發(fā)生變化。
執(zhí)行處理器的二進(jìn)制可執(zhí)行程序,由于二進(jìn)制可執(zhí)行程序本身具有執(zhí)行次序,從而可以根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序,去執(zhí)行二進(jìn)制可執(zhí)行程序;在執(zhí)行至二進(jìn)制可執(zhí)行程序中的一條用戶(hù)態(tài)軟中斷指令的時(shí)候,由于與各擴(kuò)充指令分別一一對(duì)應(yīng)的指令模擬程序是具有內(nèi)存位置的,同時(shí)擴(kuò)充指令、用戶(hù)態(tài)軟中斷指令、指令模擬程序中三者是一一對(duì)應(yīng)的,從而可以確定與當(dāng)前用戶(hù)態(tài)軟中斷指令對(duì)應(yīng)的擴(kuò)充指令的指令模擬程序的內(nèi)存位置。
舉例來(lái)說(shuō),一個(gè)指令模擬程序的內(nèi)存位置為0xf010 0000,根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序執(zhí)行二進(jìn)制可執(zhí)行程序,在執(zhí)行到用戶(hù)態(tài)軟中斷指令時(shí),可以確定指令模擬程序的內(nèi)存位置0xf010 0000。
步驟102、根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。
在本實(shí)施例中,具體的,根據(jù)步驟101中確定出的指令模擬程序的內(nèi)存位置,可以確定出與當(dāng)前用戶(hù)態(tài)軟中斷指令對(duì)應(yīng)的擴(kuò)充指令的指令模擬程序,然后調(diào)用與擴(kuò)充指令對(duì)應(yīng)的該指令模擬程序,進(jìn)而執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的該指令模擬程序。此時(shí),可以完成對(duì)與當(dāng)前用戶(hù)態(tài)軟中斷指令對(duì)應(yīng)的擴(kuò)充指令的測(cè)試。
對(duì)于二進(jìn)制可執(zhí)行程序中的每一條用戶(hù)態(tài)軟中斷指令,在根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序去執(zhí)行二進(jìn)制可執(zhí)行程序,在執(zhí)行至二進(jìn)制可執(zhí)行程序中的每一條用戶(hù)態(tài)軟中斷指令的時(shí)候,都可以采用步驟101、步驟102的方法,完成調(diào)用并執(zhí)行與每一條擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的過(guò)程,進(jìn)而對(duì)二進(jìn)制可執(zhí)行程序中的每一條擴(kuò)充指令完成測(cè)試。
本實(shí)施例通過(guò)根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置,其中,用戶(hù)態(tài)軟中斷指令與二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令對(duì)應(yīng);根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。從而由于各擴(kuò)充指令已被替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù),就可以對(duì)二進(jìn)制可執(zhí)行程序進(jìn)行模擬執(zhí)行,進(jìn)而不會(huì)導(dǎo)致二進(jìn)制可執(zhí)行程序中的各指令的地址發(fā)生變化,無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序重新進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。
圖2為本發(fā)明實(shí)施例二提供的擴(kuò)充指令的模擬方法的流程圖,在實(shí)施例一的基礎(chǔ)上,如圖2所示,本實(shí)施例的方法,在步驟101之前,還包括:
步驟201、接收替換指令,替換指令中包括各擴(kuò)充指令以及與各擴(kuò)充指令一一對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令;根據(jù)替換指令,將各擴(kuò)充指令分別替換為與各擴(kuò)充指令一一對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令。
在本實(shí)施例中,具體的,在處理器的升級(jí)和更新過(guò)程中,需要對(duì)處理器中的二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充,處理器中包括了多個(gè)二進(jìn)制可執(zhí)行程序,每一個(gè)二進(jìn)制可執(zhí)行程序中包括了多條指令。將二進(jìn)制可執(zhí)行程序中的擴(kuò)充后的指令稱(chēng)為擴(kuò)充指令。在對(duì)處理器的二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充之后,需要對(duì)二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行測(cè)試。
將處理器的二進(jìn)制可執(zhí)行程序進(jìn)行備份之后,首先提供了一個(gè)擴(kuò)充指令集模擬器,在擴(kuò)充指令集模擬器中存儲(chǔ)了與各擴(kuò)充指令分別對(duì)應(yīng)的各用戶(hù)態(tài)軟中斷指令。接收替換指令,在替換指令中攜帶了各擴(kuò)充指令以及與各擴(kuò)充指令一一對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令;然后了根據(jù)根據(jù)替換指令,將二進(jìn)制可執(zhí)行程序中的各擴(kuò)充指令,按照實(shí)際需求分別都替換為擴(kuò)充指令集模擬器中的與各擴(kuò)充指令分別對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令;此時(shí),由于是一條擴(kuò)充指令替換為一條用戶(hù)態(tài)軟中斷指令,從而二進(jìn)制可執(zhí)行程序中的指令條數(shù),以及二進(jìn)制可執(zhí)行程序的各指令的地址都不會(huì)發(fā)生變化。
用戶(hù)態(tài)軟中斷指令中還包括:第一寄存器標(biāo)識(shí);相應(yīng)的,在步驟102之前,還包括:
步驟202、根據(jù)用戶(hù)態(tài)軟中斷指令,將用戶(hù)態(tài)軟中斷指令的程序計(jì)數(shù)器PC值存儲(chǔ)至與第一寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中;
在步驟102之后,還包括:
步驟203、根據(jù)用戶(hù)態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進(jìn)制可執(zhí)行程序中與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令。
在本實(shí)施例中,具體的,二進(jìn)制可執(zhí)行程序中的各指令均具有PC值,PC值是一個(gè)16位的計(jì)數(shù)器,用于存放和指示下一條需要執(zhí)行的指令的地址。從而二進(jìn)制可執(zhí)行程序的擴(kuò)充指令也是具有PC值的,由于將擴(kuò)充指令替換了用戶(hù)態(tài)軟中斷指令,從而擴(kuò)充指令的PC值就是與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令的PC值,用戶(hù)態(tài)軟中斷指令的PC值指示了二進(jìn)制可執(zhí)行程序中下一條需要執(zhí)行的指令的地址。
在步驟101中的用戶(hù)態(tài)軟中斷指令中還包括第一寄存器標(biāo)識(shí),從而在步驟102之前,可以根據(jù)用戶(hù)態(tài)軟中斷指令,將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至與第一寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中。具體來(lái)說(shuō),在根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶(hù)態(tài)軟中斷指令JumpAndBack時(shí),可以將當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值記錄到寄存器BackReg中。然后,再調(diào)取指令集模擬器,指令集模擬器去執(zhí)行與當(dāng)前擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而對(duì)與用戶(hù)態(tài)軟中斷指令對(duì)應(yīng)的擴(kuò)充指令進(jìn)行模擬執(zhí)行。
從而在步驟102執(zhí)行了與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序之后,此時(shí)已經(jīng)完成了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令的模擬執(zhí)行;然后根據(jù)與第一寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中存儲(chǔ)的當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值,確定出二進(jìn)制可執(zhí)行程序中與該用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令的地址,進(jìn)而確定出與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令,然后執(zhí)行與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令。從而依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令,然后按照步驟101-步驟102的過(guò)程對(duì)二進(jìn)制可執(zhí)行程序中的下一條擴(kuò)充指令進(jìn)行測(cè)試。
舉例來(lái)說(shuō),當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值為0x8010 0004,可以根據(jù)該P(yáng)C值,確定二進(jìn)制可執(zhí)行程序中與該P(yáng)C值對(duì)應(yīng)的指令,與該P(yáng)C值對(duì)應(yīng)的指令為需要執(zhí)行的下一條指令。
在步驟101之前,還包括:
步驟204、接收第一存儲(chǔ)指令,第一存儲(chǔ)指令包括第二寄存器標(biāo)識(shí);根據(jù)第一存儲(chǔ)指令,將具有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器存儲(chǔ)至內(nèi)存中,并確定指令集模擬器在內(nèi)存中的內(nèi)存位置之后,將內(nèi)存位置存儲(chǔ)至與第二寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中。
在本實(shí)施例中,具體的,可以接收到攜帶了第二寄存器標(biāo)識(shí)的第一存儲(chǔ)指令;進(jìn)而根據(jù)第一存儲(chǔ)指令,將存儲(chǔ)有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器,存儲(chǔ)到設(shè)備的內(nèi)存中。然后,需要確定出指令集模擬器在內(nèi)存中的內(nèi)存位置,就可以將確定出的內(nèi)存位置存儲(chǔ)至與第二寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中。
然后,在對(duì)二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充之后,需要對(duì)二進(jìn)制可執(zhí)行程序中的各擴(kuò)充指令進(jìn)行模擬執(zhí)行之前,首先獲取預(yù)先放入內(nèi)存的指令集模擬器在內(nèi)存中的內(nèi)存位置,例如,內(nèi)存位置為0xf010 0000。然后,將獲取到的指令集模擬器在內(nèi)存中的內(nèi)存位置,存儲(chǔ)到寄存器TargetReg中。之后,再掃描二進(jìn)制可執(zhí)行程序的原代碼,將二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令替換為擴(kuò)充指令集模擬器中的用戶(hù)態(tài)軟中斷指令JumpAndBack。
在步驟101之前,還包括:
步驟205、接收第二存儲(chǔ)指令,第二存儲(chǔ)指令包括第三寄存器標(biāo)識(shí);根據(jù)第二存儲(chǔ)指令,將各擴(kuò)充指令的各指令信息,分別存儲(chǔ)至與第三寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中。
在本實(shí)施例中,具體的,二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令具有PC值、代碼條數(shù)信息、指令格式信息等指令信息。從而在對(duì)二進(jìn)制可執(zhí)行程序中的各擴(kuò)充指令進(jìn)行模擬執(zhí)行之前,接收到一個(gè)攜帶了第三寄存器標(biāo)識(shí)的第二存儲(chǔ)指令,然后根據(jù)第二存儲(chǔ)指令,先將擴(kuò)充指令的各指令信息,分別一一存儲(chǔ)至與第三寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中。將擴(kuò)充指令的各指令信息進(jìn)行存儲(chǔ),從而可以預(yù)先保留二進(jìn)制可執(zhí)行程序的程序執(zhí)行現(xiàn)場(chǎng)。
在步驟102之后,還包括:
步驟206、接收清除指令,清除指令包括第三寄存器標(biāo)識(shí);根據(jù)清除指令,清除與第三寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中的各指令信息。
在本實(shí)施例中,具體的,完成了對(duì)當(dāng)前擴(kuò)充指令的模擬執(zhí)行之后,會(huì)根據(jù)寄存器BackReg中的當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值,尋找到二進(jìn)制可執(zhí)行程序中的該P(yáng)C值所指向的指令,然后執(zhí)行該P(yáng)C值所指向的指令,此時(shí)已經(jīng)徹底完成了對(duì)當(dāng)前擴(kuò)充指令的模擬執(zhí)行。
然后,接收到一個(gè)攜帶了第三寄存器標(biāo)識(shí)的清除指令;然后可以給根據(jù)清除指令,可以清除步驟205中的寄存器中所保存的擴(kuò)充指令的各指令信息,從而恢復(fù)二進(jìn)制可執(zhí)行程序的程序現(xiàn)場(chǎng)。
然后在實(shí)施例一的基礎(chǔ)上,可以參照本實(shí)施例的各步驟,依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令,對(duì)二進(jìn)制可執(zhí)行程序中的下一條擴(kuò)充指令進(jìn)行模擬執(zhí)行。
本實(shí)施例通過(guò)將存儲(chǔ)有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器放入到內(nèi)存中,從而不需要再將指令模擬程序放入到二進(jìn)制可執(zhí)行程序中,進(jìn)而不會(huì)改變二進(jìn)制可執(zhí)行程序的指令條數(shù)、以及二進(jìn)制可執(zhí)行程序的各指令的地址;將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至寄存器中,從而可以依據(jù)該P(yáng)C值尋找到二進(jìn)制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進(jìn)制可執(zhí)行程序的執(zhí)行和擴(kuò)充指令的模擬執(zhí)行;將擴(kuò)充指令中的各指令信息進(jìn)行存儲(chǔ),可以有效的存儲(chǔ)二進(jìn)制可執(zhí)行程序的程序信息。同時(shí),從而由于只需要將擴(kuò)充指令替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行,同時(shí),無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。同時(shí),在對(duì)擴(kuò)充指令模擬執(zhí)行結(jié)束之后,可以根據(jù)預(yù)先存儲(chǔ)的與該用戶(hù)態(tài)軟終端指令對(duì)應(yīng)的PC值,根據(jù)該P(yáng)C值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,進(jìn)而執(zhí)行二進(jìn)制可執(zhí)行程序中的與該P(yáng)C值對(duì)應(yīng)的指令,繼續(xù)進(jìn)行二進(jìn)制可執(zhí)行程序的執(zhí)行過(guò)程,從而依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令;進(jìn)而在對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行之后,可以根據(jù)用戶(hù)態(tài)軟中斷指令的PC值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,繼續(xù)執(zhí)行二進(jìn)制可執(zhí)行程序的后續(xù)指令,然后對(duì)二進(jìn)制可執(zhí)行程序中的后續(xù)的擴(kuò)充指令進(jìn)行模擬執(zhí)行。
圖3為本發(fā)明實(shí)施例三提供的擴(kuò)充指令的模擬裝置的結(jié)構(gòu)示意圖,如圖3所示,本實(shí)施例提供的擴(kuò)充指令的模擬裝置,包括:
確定模塊31,用于根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置,其中,用戶(hù)態(tài)軟中斷指令與二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令對(duì)應(yīng);
執(zhí)行模塊32,用于根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。
本實(shí)施例的擴(kuò)充指令的模擬裝置可執(zhí)行本發(fā)明實(shí)施例一提供的擴(kuò)充指令的模擬方法,其實(shí)現(xiàn)原理相類(lèi)似,此處不再贅述。
本實(shí)施例通過(guò)根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置,其中,用戶(hù)態(tài)軟中斷指令與二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令對(duì)應(yīng);根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。從而由于各擴(kuò)充指令已被替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù),就可以對(duì)二進(jìn)制可執(zhí)行程序進(jìn)行模擬執(zhí)行,進(jìn)而不會(huì)導(dǎo)致二進(jìn)制可執(zhí)行程序中的各指令的地址發(fā)生變化,無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序重新進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。
圖4為本發(fā)明實(shí)施例四提供的擴(kuò)充指令的模擬裝置的結(jié)構(gòu)示意圖,在實(shí)施例三的基礎(chǔ)上,如圖4所示,本實(shí)施例提供的擴(kuò)充指令的模擬裝置,還包括:
替換模塊41,用于在確定模塊31根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置之前,接收替換指令,替換指令中包括各擴(kuò)充指令以及與各擴(kuò)充指令一一對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令;根據(jù)替換指令,將各擴(kuò)充指令分別替換為與各擴(kuò)充指令一一對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令。
用戶(hù)態(tài)軟中斷指令中還包括:第一寄存器標(biāo)識(shí);擴(kuò)充指令的模擬裝置,還包括:
第一存儲(chǔ)模塊42,用于在執(zhí)行模塊32根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序之前,根據(jù)用戶(hù)態(tài)軟中斷指令,將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至與第一寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中;
跳轉(zhuǎn)模塊43,用于在執(zhí)行模塊32根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序之后,根據(jù)用戶(hù)態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進(jìn)制可執(zhí)行程序中與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令。
本實(shí)施例提供的擴(kuò)充指令的模擬裝置,還包括:
第二存儲(chǔ)模塊44,用于在確定模塊31根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置之前,接收第一存儲(chǔ)指令,第一存儲(chǔ)指令包括第二寄存器標(biāo)識(shí);根據(jù)第一存儲(chǔ)指令,將具有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器存儲(chǔ)至內(nèi)存中,并確定指令集模擬器在內(nèi)存中的內(nèi)存位置之后,將內(nèi)存位置存儲(chǔ)至與第二寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中。
第三存儲(chǔ)模塊45,用于在確定模塊31根據(jù)二進(jìn)制可執(zhí)行程序中的用戶(hù)態(tài)軟中斷指令,確定與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的內(nèi)存位置之前,接收第二存儲(chǔ)指令,第二存儲(chǔ)指令包括第三寄存器標(biāo)識(shí);根據(jù)第二存儲(chǔ)指令,將各擴(kuò)充指令的各指令信息,分別存儲(chǔ)至與第三寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中。
清除模塊46,用于在執(zhí)行模塊32根據(jù)內(nèi)存位置,調(diào)用并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序之后,接收清除指令,清除指令包括第三寄存器標(biāo)識(shí);根據(jù)清除指令,清除與第三寄存器標(biāo)識(shí)對(duì)應(yīng)的寄存器中的各指令信息。
本實(shí)施例的擴(kuò)充指令的模擬裝置可執(zhí)行本發(fā)明實(shí)施例二提供的擴(kuò)充指令的模擬方法,其實(shí)現(xiàn)原理相類(lèi)似,此處不再贅述。
本實(shí)施例通過(guò)將存儲(chǔ)有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器放入到內(nèi)存中,從而不需要再將指令模擬程序放入到二進(jìn)制可執(zhí)行程序中,進(jìn)而不會(huì)改變二進(jìn)制可執(zhí)行程序的指令條數(shù)、以及二進(jìn)制可執(zhí)行程序的各指令的地址;將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至寄存器中,從而可以依據(jù)該P(yáng)C值尋找到二進(jìn)制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進(jìn)制可執(zhí)行程序的執(zhí)行和擴(kuò)充指令的模擬執(zhí)行;將擴(kuò)充指令中的各指令信息進(jìn)行存儲(chǔ),可以有效的存儲(chǔ)二進(jìn)制可執(zhí)行程序的程序信息。同時(shí),從而由于只需要將擴(kuò)充指令替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行,同時(shí),無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。同時(shí),在對(duì)擴(kuò)充指令模擬執(zhí)行結(jié)束之后,可以根據(jù)預(yù)先存儲(chǔ)的與該用戶(hù)態(tài)軟終端指令對(duì)應(yīng)的PC值,根據(jù)該P(yáng)C值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,進(jìn)而執(zhí)行二進(jìn)制可執(zhí)行程序中的與該P(yáng)C值對(duì)應(yīng)的指令,繼續(xù)進(jìn)行二進(jìn)制可執(zhí)行程序的執(zhí)行過(guò)程,從而依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令;進(jìn)而在對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行之后,可以根據(jù)用戶(hù)態(tài)軟中斷指令的PC值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,繼續(xù)執(zhí)行二進(jìn)制可執(zhí)行程序的后續(xù)指令,然后對(duì)二進(jìn)制可執(zhí)行程序中的后續(xù)的擴(kuò)充指令進(jìn)行模擬執(zhí)行。
圖5為本發(fā)明實(shí)施例五提供的擴(kuò)充指令的模擬方法的流程圖,如圖5所示,本實(shí)施例的方法包括:
步驟501、指令集模擬器將二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令替換為用戶(hù)態(tài)軟中斷指令。
在本實(shí)施例中,具體的,在處理器的升級(jí)和更新過(guò)程中,需要對(duì)處理器中的二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充,處理器中包括了多個(gè)二進(jìn)制可執(zhí)行程序,每一個(gè)二進(jìn)制可執(zhí)行程序中包括了多條指令。將二進(jìn)制可執(zhí)行程序中的擴(kuò)充后的指令稱(chēng)為擴(kuò)充指令。在對(duì)處理器的二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充之后,需要對(duì)二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行測(cè)試。
將處理器的二進(jìn)制可執(zhí)行程序進(jìn)行備份之后,首先提供了一個(gè)擴(kuò)充指令集模擬器,在擴(kuò)充指令集模擬器中存儲(chǔ)了與各擴(kuò)充指令分別對(duì)應(yīng)的各用戶(hù)態(tài)軟中斷指令。將二進(jìn)制可執(zhí)行程序中的各擴(kuò)充指令,按照實(shí)際需求分別都替換為擴(kuò)充指令集模擬器中的與各擴(kuò)充指令分別對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令;此時(shí),由于是一條擴(kuò)充指令替換為一條用戶(hù)態(tài)軟中斷指令,從而二進(jìn)制可執(zhí)行程序中的指令條數(shù),以及二進(jìn)制可執(zhí)行程序的各指令的地址都不會(huì)發(fā)生變化。
步驟502、在根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶(hù)態(tài)軟中斷指令時(shí),處理器根據(jù)第一寄存器中存儲(chǔ)的指令集模擬器的內(nèi)存位置,確定指令集模擬器,其中,指令集模擬器包括與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。
在本實(shí)施例中,具體的,已經(jīng)預(yù)先將指令集模擬器存儲(chǔ)在了設(shè)備的內(nèi)存中,將指令集模擬器的內(nèi)存位置存儲(chǔ)至了設(shè)備的第一寄存器中;在指令集模擬器中存儲(chǔ)了與各個(gè)擴(kuò)充指令對(duì)應(yīng)的指令模擬程序;針對(duì)每一個(gè)指令模擬程序來(lái)說(shuō),指令測(cè)試程序是對(duì)與其對(duì)應(yīng)的擴(kuò)充指令進(jìn)行測(cè)試的代碼的集合。
執(zhí)行處理器的二進(jìn)制可執(zhí)行程序,由于二進(jìn)制可執(zhí)行程序本身具有執(zhí)行次序,從而可以根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序,去執(zhí)行二進(jìn)制可執(zhí)行程序,可以根據(jù)第一寄存器中預(yù)先存儲(chǔ)的指令集模擬器的內(nèi)存位置,確定指令集模擬器的位置,進(jìn)而調(diào)取指令集模擬器。
舉例來(lái)說(shuō),指令集模擬器的內(nèi)存位置為0xf010 0000,根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序執(zhí)行二進(jìn)制可執(zhí)行程序,在執(zhí)行到用戶(hù)態(tài)軟中斷指令時(shí),根據(jù)指令集模擬器的內(nèi)存位置0xf010 0000,調(diào)取出存儲(chǔ)有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器。
步驟503、指令集模擬器調(diào)取并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。
在本實(shí)施例中,具體的,根據(jù)步驟502中確定出的指令集模擬器以及當(dāng)前的用戶(hù)態(tài)軟中斷指令,由于用戶(hù)態(tài)軟中斷指令是與擴(kuò)充指令對(duì)應(yīng)的,進(jìn)而指令集模擬器調(diào)取出指令集模擬器中與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。然后,指令集模擬器執(zhí)行指令集模擬器中的與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而指令集模擬器完成指令模擬,即完成擴(kuò)充指令的測(cè)試。
本實(shí)施例提供了一種新的擴(kuò)充指令的模擬方法,在對(duì)二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充之后,擴(kuò)充之后的指令形成了各擴(kuò)充指令,此時(shí)需要對(duì)各擴(kuò)充指令進(jìn)行測(cè)試;在對(duì)擴(kuò)充指令進(jìn)行測(cè)試的時(shí)候,只需要將擴(kuò)充指令替換為與擴(kuò)充指令對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,可以執(zhí)行該指令模擬程序,進(jìn)而二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行了模擬執(zhí)行;然后按照本實(shí)施例的方法對(duì)二進(jìn)制可執(zhí)行程序中的下一條擴(kuò)充指令進(jìn)行模擬執(zhí)行。從而由于只需要將各擴(kuò)充指令替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù),就可以對(duì)二進(jìn)制可執(zhí)行程序進(jìn)行模擬執(zhí)行,進(jìn)而不會(huì)導(dǎo)致二進(jìn)制可執(zhí)行程序中的各指令的地址發(fā)生變化,無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序重新進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。
圖6為本發(fā)明實(shí)施例六提供的擴(kuò)充指令的模擬方法的流程圖,如圖6所示,在實(shí)施例五的基礎(chǔ)上,在步驟503之后,還包括:
步驟504、指令集模擬器根據(jù)第二寄存器中存儲(chǔ)的用戶(hù)態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進(jìn)制可執(zhí)行程序中與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令。
在本實(shí)施例中,具體的,二進(jìn)制可執(zhí)行程序中的各指令均具有PC值,PC值是一個(gè)16位的計(jì)數(shù)器,用于存放和指示下一條需要執(zhí)行的指令的地址。從而二進(jìn)制可執(zhí)行程序的擴(kuò)充指令也是具有PC值的,由于將擴(kuò)充指令替換了用戶(hù)態(tài)軟中斷指令,從而擴(kuò)充指令的PC值就是與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令的PC值,用戶(hù)態(tài)軟中斷指令的PC值指示了二進(jìn)制可執(zhí)行程序中下一條需要執(zhí)行的指令的地址??梢詫⒏饔脩?hù)態(tài)軟中斷指令的PC值存儲(chǔ)在第二寄存器中。
在步驟503執(zhí)行了與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序之后,此時(shí)已經(jīng)完成了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令的模擬執(zhí)行;然后根據(jù)第二寄存器中存儲(chǔ)的當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值,確定出二進(jìn)制可執(zhí)行程序中與該用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令的地址,進(jìn)而確定出與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令,然后執(zhí)行與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令。從而依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令,然后按照步驟501-步驟504的過(guò)程對(duì)二級(jí)制可執(zhí)行程序中的下一條擴(kuò)充指令進(jìn)行測(cè)試。
舉例來(lái)說(shuō),當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值為0x8010 0004,可以根據(jù)該P(yáng)C值,確定二進(jìn)制可執(zhí)行程序中與該P(yáng)C值對(duì)應(yīng)的指令,與該P(yáng)C值對(duì)應(yīng)的指令為需要執(zhí)行的下一條指令。
在步驟501之前,還包括:
步驟601、處理器將指令集模擬器存儲(chǔ)至內(nèi)存中;處理器獲取指令集模擬器在內(nèi)存中的內(nèi)存位置,將內(nèi)存位置存儲(chǔ)至第一寄存器中。
在本實(shí)施例中,具體的,處理器將存儲(chǔ)有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器,存儲(chǔ)到設(shè)備的內(nèi)存中。
在對(duì)二進(jìn)制可執(zhí)行程序中的指令進(jìn)行擴(kuò)充之后,需要對(duì)二進(jìn)制可執(zhí)行程序中的各擴(kuò)充指令進(jìn)行模擬執(zhí)行之前,首先獲取預(yù)先放入內(nèi)存的指令集模擬器在內(nèi)存中的內(nèi)存位置,例如,內(nèi)存位置為0xf010 0000。然后,將獲取到的指令集模擬器在內(nèi)存中的內(nèi)存位置,存儲(chǔ)到第一寄存器TargetReg中。之后,再掃描二進(jìn)制可執(zhí)行程序的原代碼,將二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令替換為擴(kuò)充指令集模擬器中的用戶(hù)態(tài)軟中斷指令JumpAndBack。
在步驟501之前,還包括:
步驟602、處理器將擴(kuò)充指令的各指令信息,分別存儲(chǔ)至與第一寄存器、第二寄存器不同的寄存器中。
在本實(shí)施例中,具體的,二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令具有PC值、代碼條數(shù)信息、指令格式信息等指令信息。在對(duì)二進(jìn)制可執(zhí)行程序中的各擴(kuò)充指令進(jìn)行模擬執(zhí)行之前,先將擴(kuò)充指令的各指令信息,分別一一存儲(chǔ)至不同的寄存器中,這里的寄存器并不是第一寄存器和第二寄存器。將擴(kuò)充指令的各指令信息進(jìn)行存儲(chǔ),從而可以預(yù)先保留二進(jìn)制可執(zhí)行程序的程序執(zhí)行現(xiàn)場(chǎng)。
在步驟502之前,還包括:
步驟603、處理器確定用戶(hù)態(tài)軟中斷指令的PC值,將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至第二寄存器中。
在本實(shí)施例中,具體的,在根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶(hù)態(tài)軟中斷指令JumpAndBack時(shí),處理器可以將當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值記錄到第二寄存器BackReg中。然后,再調(diào)取指令集模擬器,指令集模擬器去執(zhí)行與當(dāng)前擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而對(duì)與用戶(hù)態(tài)軟中斷指令對(duì)應(yīng)的擴(kuò)充指令進(jìn)行模擬執(zhí)行。
在步驟504之后,還包括:
步驟604、處理器清除與第一寄存器、第二寄存器不同的寄存器中存儲(chǔ)的各指令信息。
在本實(shí)施例中,具體的,完成了對(duì)當(dāng)前擴(kuò)充指令的模擬執(zhí)行之后,會(huì)根據(jù)第二寄存器BackReg中的當(dāng)前用戶(hù)態(tài)軟中斷指令的PC值,尋找到二進(jìn)制可執(zhí)行程序中的該P(yáng)C值所指向的指令,然后執(zhí)行該P(yáng)C值所指向的指令,此時(shí)已經(jīng)徹底完成了對(duì)當(dāng)前擴(kuò)充指令的模擬執(zhí)行。然后,可以清除步驟602中的不同于第一寄存器、第二寄存器的各寄存器中所保存的擴(kuò)充指令的各指令信息,從而恢復(fù)二進(jìn)制可執(zhí)行程序的程序現(xiàn)場(chǎng)。然后在實(shí)施例一的基礎(chǔ)上,可以參照本實(shí)施例的步驟603、步驟603、步驟604,依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令,對(duì)二進(jìn)制可執(zhí)行程序中的下一條擴(kuò)充指令進(jìn)行模擬執(zhí)行。
本實(shí)施例通過(guò)將存儲(chǔ)有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器放入到內(nèi)存中,從而不需要再將指令模擬程序放入到二進(jìn)制可執(zhí)行程序中,進(jìn)而不會(huì)改變二進(jìn)制可執(zhí)行程序的指令條數(shù)、以及二進(jìn)制可執(zhí)行程序的各指令的地址;將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至第二寄存器中,從而可以依據(jù)該P(yáng)C值尋找到二進(jìn)制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進(jìn)制可執(zhí)行程序的執(zhí)行和擴(kuò)充指令的模擬執(zhí)行;將擴(kuò)充指令中的各指令信息進(jìn)行存儲(chǔ),可以有效的存儲(chǔ)二進(jìn)制可執(zhí)行程序的程序信息。同時(shí),從而由于只需要將擴(kuò)充指令替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行,同時(shí),無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。同時(shí),在對(duì)擴(kuò)充指令模擬執(zhí)行結(jié)束之后,可以根據(jù)預(yù)先存儲(chǔ)的與該用戶(hù)態(tài)軟終端指令對(duì)應(yīng)的PC值,根據(jù)該P(yáng)C值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,進(jìn)而執(zhí)行二進(jìn)制可執(zhí)行程序中的與該P(yáng)C值對(duì)應(yīng)的指令,繼續(xù)進(jìn)行二進(jìn)制可執(zhí)行程序的執(zhí)行過(guò)程,從而依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令;進(jìn)而在對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行之后,可以根據(jù)用戶(hù)態(tài)軟中斷指令的PC值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,繼續(xù)執(zhí)行二進(jìn)制可執(zhí)行程序的后續(xù)指令,然后對(duì)二進(jìn)制可執(zhí)行程序中的后續(xù)的擴(kuò)充指令進(jìn)行模擬執(zhí)行。
圖7為本發(fā)明實(shí)施例七提供的擴(kuò)充指令的模擬裝置的結(jié)構(gòu)示意圖,如圖7所示,本實(shí)施例提供的擴(kuò)充指令的模擬裝置,包括:
測(cè)試子裝置1,第一寄存器2和第二寄存器3,其中,測(cè)試子裝置1分別與第一寄存器2和第二寄存器3連接;
測(cè)試子裝置1包括:指令集模擬器11和處理器12;
指令集模擬器11,用于將二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令替換為用戶(hù)態(tài)軟中斷指令;并在根據(jù)二進(jìn)制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶(hù)態(tài)軟中斷指令時(shí),處理器12根據(jù)第一寄存器2中存儲(chǔ)的指令集模擬器11的內(nèi)存位置,確定指令集模擬器11之后,其中,指令集模擬器11包括與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,調(diào)取并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序。
進(jìn)一步的,指令集模擬器11,還用于:
在指令集模擬器11調(diào)取并執(zhí)行與擴(kuò)充指令對(duì)應(yīng)的指令模擬程序之后,根據(jù)第二寄存器3中存儲(chǔ)的用戶(hù)態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進(jìn)制可執(zhí)行程序中與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的指令。
處理器12,還用于:
在處理器12根據(jù)第一寄存器2中存儲(chǔ)的指令集模擬器11的內(nèi)存位置,確定指令集模擬器11之前,確定用戶(hù)態(tài)軟中斷指令的PC值,將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至第二寄存器3中。
處理器12,還用于:
在指令集模擬器11將二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令替換為用戶(hù)態(tài)軟中斷指令之前,將指令集模擬器11存儲(chǔ)至內(nèi)存中,獲取指令集模擬器11在內(nèi)存中的內(nèi)存位置,將內(nèi)存位置存儲(chǔ)至第一寄存器2中。
處理器12,還用于:
在指令集模擬器11將二進(jìn)制可執(zhí)行程序中的擴(kuò)充指令替換為用戶(hù)態(tài)軟中斷指令之前,將擴(kuò)充指令的各指令信息,分別存儲(chǔ)至與第一寄存器2、第二寄存器3不同的寄存器中。
處理器12,還用于:
在指令集模擬器11根據(jù)第二寄存器3中存儲(chǔ)的用戶(hù)態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進(jìn)制可執(zhí)行程序中與用戶(hù)態(tài)軟中斷指令的PC值對(duì)應(yīng)的擴(kuò)充指令之后,清除與第一寄存器2、第二寄存器3不同的寄存器中存儲(chǔ)的各指令信息。
本實(shí)施例的擴(kuò)充指令的模擬裝置可執(zhí)行本發(fā)明實(shí)施例五和實(shí)施例六提供的擴(kuò)充指令的模擬方法,其實(shí)現(xiàn)原理相類(lèi)似,此處不再贅述。
本實(shí)施例通過(guò)將存儲(chǔ)有與各擴(kuò)充指令對(duì)應(yīng)的指令模擬程序的指令集模擬器放入到內(nèi)存中,從而不需要再將指令模擬程序放入到二進(jìn)制可執(zhí)行程序中,進(jìn)而不會(huì)改變二進(jìn)制可執(zhí)行程序的指令條數(shù)、以及二進(jìn)制可執(zhí)行程序的各指令的地址;將用戶(hù)態(tài)軟中斷指令的PC值存儲(chǔ)至第二寄存器中,從而可以依據(jù)該P(yáng)C值尋找到二進(jìn)制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進(jìn)制可執(zhí)行程序的執(zhí)行和擴(kuò)充指令的模擬執(zhí)行;將擴(kuò)充指令中的各指令信息進(jìn)行存儲(chǔ),可以有效的存儲(chǔ)二進(jìn)制可執(zhí)行程序的程序信息。同時(shí),從而由于只需要將擴(kuò)充指令替換為與其對(duì)應(yīng)的用戶(hù)態(tài)軟中斷指令,而用戶(hù)態(tài)軟中斷指令指向了指令集模擬器中的與該擴(kuò)充指令對(duì)應(yīng)的指令模擬程序,進(jìn)而不需要改變二進(jìn)制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行,同時(shí),無(wú)需對(duì)二進(jìn)制可執(zhí)行程序的代碼程序進(jìn)行掃描,減少了對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行的時(shí)間,提高了模擬執(zhí)行的效率。同時(shí),在對(duì)擴(kuò)充指令模擬執(zhí)行結(jié)束之后,可以根據(jù)預(yù)先存儲(chǔ)的與該用戶(hù)態(tài)軟終端指令對(duì)應(yīng)的PC值,根據(jù)該P(yáng)C值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,進(jìn)而執(zhí)行二進(jìn)制可執(zhí)行程序中的與該P(yáng)C值對(duì)應(yīng)的指令,繼續(xù)進(jìn)行二進(jìn)制可執(zhí)行程序的執(zhí)行過(guò)程,從而依次執(zhí)行二進(jìn)制可執(zhí)行程序中的指令;進(jìn)而在對(duì)二進(jìn)制可執(zhí)行程序的擴(kuò)充指令進(jìn)行模擬執(zhí)行之后,可以根據(jù)用戶(hù)態(tài)軟中斷指令的PC值跳轉(zhuǎn)回到二進(jìn)制可執(zhí)行程序中,繼續(xù)執(zhí)行二進(jìn)制可執(zhí)行程序的后續(xù)指令,然后對(duì)二進(jìn)制可執(zhí)行程序中的后續(xù)的擴(kuò)充指令進(jìn)行模擬執(zhí)行。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說(shuō)明的是:以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。