專利名稱:用于開發(fā)計(jì)算機(jī)系統(tǒng)的裝置及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于開發(fā)計(jì)算機(jī)系統(tǒng)的裝置及其方法,更具體而言,涉及一種用于開發(fā)嵌入式或者控制用的計(jì)算機(jī)系統(tǒng)(例如交換機(jī)或者網(wǎng)絡(luò)防火墻)的裝置和方法。
背景技術(shù):
計(jì)算機(jī)在社會(huì)生活中起著越來越重要的作用,這與計(jì)算機(jī)軟件日新月異的發(fā)展密不可分。計(jì)算機(jī)軟件大致可以分為兩類系統(tǒng)軟件和應(yīng)用軟件。目前的計(jì)算機(jī)中,系統(tǒng)軟件為應(yīng)用軟件提供一個(gè)統(tǒng)一的平臺(tái);應(yīng)用軟件則在系統(tǒng)軟件的基礎(chǔ)上實(shí)現(xiàn)用戶所需要的功能。而操作系統(tǒng)則是最基本的系統(tǒng)軟件。另外,目前PC機(jī)都是采用馮·諾曼體系,代碼和數(shù)據(jù)的邏輯地址空間是線性的。
現(xiàn)有的計(jì)算機(jī)系統(tǒng)中,操作系統(tǒng)為上層應(yīng)用提供接口使其調(diào)用系統(tǒng)函數(shù)。這種函數(shù)調(diào)用的模式使得執(zhí)行一個(gè)應(yīng)用程序時(shí),要通過接口去調(diào)用操作系統(tǒng)中的函數(shù)來完成功能,這樣不僅實(shí)現(xiàn)起來比較復(fù)雜,而且,程序運(yùn)行采用線性地址空間在安全方面也有隱患。
圖1示出了現(xiàn)有的計(jì)算機(jī)系統(tǒng)。如圖所示,現(xiàn)有的計(jì)算機(jī)系統(tǒng)可以劃分為以下三層硬件層10、系統(tǒng)程序?qū)?0、和應(yīng)用程序?qū)?0。硬件層10包括中央處理器如CPU等;存儲(chǔ)器如RAM、硬盤驅(qū)動(dòng)器等;總線;輸入設(shè)備如鍵盤、鼠標(biāo)等;輸出設(shè)備如CRT顯示器等。系統(tǒng)程序?qū)?0包括操作系統(tǒng)22和其他系統(tǒng)軟件,其中,操作系統(tǒng)22是在硬件層10的基礎(chǔ)上加載的一層軟件,其用于管理整個(gè)系統(tǒng),并為應(yīng)用程序30提供接口,應(yīng)用程序30通過該接口來調(diào)用操作系統(tǒng)22,從而使操作系統(tǒng)22調(diào)用相應(yīng)的硬件10以實(shí)現(xiàn)用戶所需要的功能;以及其他系統(tǒng)軟件是在操作系統(tǒng)的上一層,其中包括編譯器24、編輯器26、命令解釋器28、以及類似的獨(dú)立于應(yīng)用程序的程序,但這些程序運(yùn)行在用戶態(tài),可以被用戶修改。系統(tǒng)程序?qū)拥纳厦媸菓?yīng)用程序?qū)?0,其包括各種應(yīng)用軟件,這些應(yīng)用軟件由用戶編寫,在系統(tǒng)程序?qū)拥幕A(chǔ)上實(shí)現(xiàn)用戶所需要的功能。
在現(xiàn)有的計(jì)算機(jī)系統(tǒng)中,應(yīng)用程序30同操作系統(tǒng)22通信并請(qǐng)求服務(wù),是通過系統(tǒng)調(diào)用進(jìn)行的。應(yīng)用程序30可以調(diào)用對(duì)應(yīng)的庫過程。比如,在這一過程中把系統(tǒng)調(diào)用參數(shù)放到指定位置,如寄存器,然后發(fā)出TRAP指令給操作系統(tǒng)22。在TRAP之后,操作系統(tǒng)22取得控制,它考察參數(shù)是否有效,如果是,完成所請(qǐng)求的工作。當(dāng)工作完成后,在一寄存器中給出狀態(tài)代碼,通知成功還是失敗,然后執(zhí)行一條RETURN FROM TRAP的指令,把控制權(quán)返回給庫過程。然后庫過程按通常方式返回到調(diào)用方,把狀態(tài)碼作為函數(shù)值返回??梢钥吹?,這個(gè)系統(tǒng)調(diào)用的過程很復(fù)雜而且效率不高。
圖2示出了現(xiàn)有的計(jì)算機(jī)系統(tǒng)的程序的代碼和數(shù)據(jù)在內(nèi)存中的邏輯地址空間。如圖所示,在現(xiàn)有的計(jì)算機(jī)系統(tǒng)中,程序的代碼和數(shù)據(jù)在內(nèi)存中的邏輯地址空間是線性的。假如一個(gè)嵌入式的網(wǎng)關(guān)采用現(xiàn)有的系統(tǒng)實(shí)現(xiàn)方法,即程序的代碼和數(shù)據(jù)在內(nèi)存采用線性地址空間,則該系統(tǒng)有可能受到來自網(wǎng)絡(luò)的蠕蟲,如Code Red,Blaster,Slammer等緩沖區(qū)溢出攻擊,這是由于C/C++編程語言對(duì)數(shù)據(jù)完整性保護(hù)不夠造成的。
如果有一個(gè)惡意程序向內(nèi)存中的數(shù)據(jù)存儲(chǔ)區(qū)域內(nèi)寫入很長(zhǎng)的數(shù)據(jù),超出了數(shù)據(jù)存儲(chǔ)區(qū)域的邊界,寫入了代碼存儲(chǔ)區(qū)域。寫入代碼存儲(chǔ)區(qū)域中的數(shù)據(jù)內(nèi)如果含有可以執(zhí)行的惡意代碼,攻擊者可以通過改變返回地址或者函數(shù)指針,讓程序跳轉(zhuǎn)到安排好的地址空間,這些惡意的代碼就會(huì)被執(zhí)行了。
現(xiàn)有的計(jì)算機(jī)系統(tǒng)包含有計(jì)算機(jī)調(diào)度機(jī)制,眾所周知,計(jì)算機(jī)調(diào)度機(jī)制包括硬件中斷調(diào)度機(jī)制、時(shí)間片輪轉(zhuǎn)調(diào)度機(jī)制、優(yōu)先級(jí)調(diào)度機(jī)制。
硬件段調(diào)度機(jī)制是指根據(jù)系統(tǒng)規(guī)定好的硬件中斷的級(jí)別來決定哪個(gè)進(jìn)程執(zhí)行,中斷級(jí)別高的優(yōu)先執(zhí)行。
時(shí)間片輪轉(zhuǎn)調(diào)度是指每個(gè)進(jìn)程被分配一個(gè)時(shí)間段,稱作它的時(shí)間片,即該進(jìn)程允許運(yùn)行的時(shí)間。如果在時(shí)間片結(jié)束時(shí)進(jìn)程還在運(yùn)行,則CPU將被剝奪并且分配給另一個(gè)進(jìn)程。如果進(jìn)程在時(shí)間片結(jié)束之前阻塞或者結(jié)束,則CPU當(dāng)即進(jìn)行切換。調(diào)度程序所要做的就是維護(hù)一張就緒進(jìn)程列表。當(dāng)進(jìn)程用完它的時(shí)間片后,它被移到隊(duì)列的末尾。
優(yōu)先級(jí)調(diào)度是指每個(gè)進(jìn)程被賦予一個(gè)優(yōu)先級(jí),優(yōu)先級(jí)最高的就緒進(jìn)程被率先執(zhí)行。為了防止高優(yōu)先級(jí)進(jìn)程無休止運(yùn)行下去,調(diào)度程序可以在每個(gè)特定時(shí)刻降低當(dāng)前進(jìn)程的優(yōu)先級(jí)。如果這個(gè)動(dòng)作導(dǎo)致其優(yōu)先級(jí)低于次高優(yōu)先級(jí),則將進(jìn)行進(jìn)程切換。
現(xiàn)有的處理器例如Intel處理器發(fā)展了一種保護(hù)模式技術(shù),該保護(hù)模式技術(shù)具有硬件段機(jī)制、代碼段寄存器、以及數(shù)據(jù)段寄存器。
硬件段機(jī)制是指保護(hù)模式下存儲(chǔ)器尋址方式為段基址加段內(nèi)偏移。用描述符來描述段的位置、大小和使用情況。關(guān)于Intel處理器的硬件段機(jī)制、代碼段寄存器、以及數(shù)據(jù)段寄存器,具體可以參考Intel公司的“ia-32 intel(r)architecture software developer′smanual”的“volume 3system programming guide”。
發(fā)明內(nèi)容
因此,本發(fā)明的目的在于提供一種用于解決現(xiàn)有的計(jì)算機(jī)系統(tǒng),更具體而言,現(xiàn)有的嵌入式或者控制用的計(jì)算機(jī)系統(tǒng)(例如交換機(jī)或者網(wǎng)絡(luò)防火墻)的上述一個(gè)或多個(gè)安全問題的計(jì)算機(jī)系統(tǒng)開發(fā)裝置和計(jì)算機(jī)系統(tǒng)開發(fā)方法。
本發(fā)明的其他優(yōu)點(diǎn)、目的和特征將作為說明書的一部分隨后闡述,在本領(lǐng)域技術(shù)人員分析以下內(nèi)容的基礎(chǔ)上將變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
根據(jù)本發(fā)明,提供了一種用于開發(fā)計(jì)算機(jī)系統(tǒng)的裝置,包括編譯器,用于將源程序編譯成目標(biāo)文件;鏈接器,用于將所述目標(biāo)文件鏈接成磁盤映像文件,所述磁盤映像文件包括數(shù)據(jù)塊部分;以及寫入器,用于將所述磁盤映像文件寫入所開發(fā)的計(jì)算機(jī)系統(tǒng)。
根據(jù)本發(fā)明,還提供了一種用于開發(fā)計(jì)算機(jī)系統(tǒng)的方法,包括編譯步驟,將源程序編譯成目標(biāo)文件;鏈接步驟,將所述目標(biāo)文件鏈接成磁盤映像文件,所述磁盤映像文件包括至少一個(gè)數(shù)據(jù)塊;以及寫入步驟,將所述磁盤映像文件寫入所開發(fā)的計(jì)算機(jī)系統(tǒng)。
根據(jù)本發(fā)明的計(jì)算機(jī)系統(tǒng)開發(fā)裝置或方法通過利用已有的程序語言和編譯環(huán)境,通過提供自己的加載器、鏈接器和寫入器,使用戶能夠快速地開發(fā)自己的專用系統(tǒng),而不需要操作系統(tǒng)的支持。
根據(jù)本發(fā)明的計(jì)算機(jī)系統(tǒng)開發(fā)裝置或開發(fā)方法所開發(fā)的計(jì)算機(jī)系統(tǒng)與現(xiàn)有的計(jì)算機(jī)系統(tǒng)相比,在以下安全性方面有改進(jìn)防止緩沖區(qū)溢出攻擊方面、以及使用硬件機(jī)制保證數(shù)據(jù)安全方面。
圖1示出了現(xiàn)有的計(jì)算機(jī)系統(tǒng);圖2示出了現(xiàn)有的計(jì)算機(jī)系統(tǒng)的程序的代碼和數(shù)據(jù)在內(nèi)存中的邏輯地址空間;圖3示出了根據(jù)本發(fā)明的計(jì)算機(jī)系統(tǒng)開發(fā)裝置或開發(fā)方法所開發(fā)的計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu);圖4示出了根據(jù)本發(fā)明的第一實(shí)施例的計(jì)算機(jī)系統(tǒng)開發(fā)平臺(tái)的結(jié)構(gòu);圖5示出了根據(jù)本發(fā)明的第一實(shí)施例的計(jì)算機(jī)系統(tǒng)開發(fā)平臺(tái)的開發(fā)計(jì)算機(jī)系統(tǒng)的流程;圖6示出了一個(gè)可供調(diào)用的目標(biāo)文件庫;圖7示出了根據(jù)本發(fā)明的第一實(shí)施例的代碼和數(shù)據(jù)儲(chǔ)存結(jié)構(gòu);圖8示出了根據(jù)本發(fā)明的第一實(shí)施例的鏈接方法;圖9示出了根據(jù)本發(fā)明的第二實(shí)施例的計(jì)算機(jī)系統(tǒng)開發(fā)平臺(tái)的結(jié)構(gòu);圖10示出了根據(jù)本發(fā)明的第二實(shí)施例的.imd文件格式;圖11示出了根據(jù)本發(fā)明的第二實(shí)施例的數(shù)據(jù)塊格式;圖12示出了根據(jù)本發(fā)明的第二實(shí)施例的磁盤映像文件格式;以及圖13示出了根據(jù)本發(fā)明的第二實(shí)施例的流程圖。
具體實(shí)施例方式
下面將以實(shí)施例的方式對(duì)本發(fā)明加以描述,應(yīng)該注意的是,本發(fā)明的這些實(shí)施例并不用于限制依據(jù)于權(quán)利要求的本發(fā)明,并且并非在實(shí)施例中所描述的所有特征的組合都是本發(fā)明的解決方案所必須的。
首先來看圖3,示出了根據(jù)本發(fā)明的計(jì)算機(jī)開發(fā)裝置或開發(fā)方法所開發(fā)的計(jì)算機(jī)系統(tǒng)100的結(jié)構(gòu)。該計(jì)算機(jī)系統(tǒng)100包括多個(gè)可獨(dú)立實(shí)現(xiàn)一定功能的模塊,并且不同的模塊運(yùn)行在CPU不同的級(jí)別上,利用硬件機(jī)制來保護(hù)內(nèi)存中的代碼和數(shù)據(jù)。這些模塊包括網(wǎng)口數(shù)據(jù)包過濾模塊110、串口數(shù)據(jù)包過濾模塊120、數(shù)據(jù)簽名模塊130、或完成其他功能的模塊140等。各模塊既不對(duì)外提供接口,也不調(diào)用其他模塊的函數(shù)。每個(gè)模塊被稱作一個(gè)“S-F系統(tǒng)(self-functioning system,自運(yùn)行系統(tǒng))”。下面將詳細(xì)地說明該系統(tǒng)的實(shí)現(xiàn)過程。
該計(jì)算機(jī)系統(tǒng)100由不同功能的功能模塊構(gòu)成,所以系統(tǒng)的實(shí)現(xiàn)過程,實(shí)際上就是各個(gè)功能模塊的實(shí)現(xiàn)過程。系統(tǒng)的實(shí)現(xiàn)過程比現(xiàn)有的計(jì)算機(jī)系統(tǒng)更加充分的利用Intel現(xiàn)有的硬件安全機(jī)制。
首先把實(shí)現(xiàn)一定功能的程序源代碼編譯為目標(biāo)文件(可以使用現(xiàn)有的編譯器)。然后把一個(gè)或者多個(gè)目標(biāo)文件的代碼和數(shù)據(jù)分別提取出來,整合成代碼段和數(shù)據(jù)段,并且把代碼段中需要重定位的地方重定位。然后填寫全局描述符表,中斷描述符表和任務(wù)段,每個(gè)代碼段占用一個(gè)全局描述符表項(xiàng),每個(gè)數(shù)據(jù)段占用一個(gè)全局描述符表項(xiàng)。表項(xiàng)中包括段基址,段內(nèi)偏移地址,以及代碼運(yùn)行在CPU哪個(gè)級(jí)別等信息。
如果要建立多個(gè)S-F系統(tǒng)則重復(fù)上述操作。然后把一個(gè)或多個(gè)S-F系統(tǒng)連同全局描述符表,中斷描述符表、和任務(wù)段封裝成磁盤映像文件并燒寫入嵌入式或者控制用的計(jì)算機(jī)的硬盤中。每個(gè)S-F系統(tǒng)可以完成特定的功能。
多個(gè)S-F系統(tǒng)可以同時(shí)運(yùn)行在計(jì)算機(jī)系統(tǒng)100中,各個(gè)S-F系統(tǒng)的調(diào)度可以使用現(xiàn)有的調(diào)度機(jī)制。比如,通過硬件中斷以及中斷級(jí)別的不同實(shí)現(xiàn)調(diào)度;或者使用時(shí)間片輪轉(zhuǎn)調(diào)度每個(gè)S-F系統(tǒng)分配一個(gè)時(shí)間段,如果在該時(shí)間段結(jié)束時(shí)該S-F系統(tǒng)還在運(yùn)行,則CPU將被剝奪并分配給另外一個(gè)S-F系統(tǒng);或者使用優(yōu)先級(jí)調(diào)度每個(gè)S-F系統(tǒng)被賦予一個(gè)優(yōu)先級(jí),優(yōu)先級(jí)最高的就緒S-F系統(tǒng)被率先執(zhí)行。為了防止高優(yōu)先級(jí)S-F系統(tǒng)無休止地運(yùn)行下去,可以在每個(gè)特定時(shí)刻(比如每一個(gè)時(shí)鐘中斷)降低當(dāng)前運(yùn)行的S-F系統(tǒng)的優(yōu)先級(jí)。如果這個(gè)動(dòng)作導(dǎo)致其優(yōu)先級(jí)低于次高優(yōu)先級(jí),則將進(jìn)行運(yùn)行系統(tǒng)的切換。另外,硬件的中斷優(yōu)先執(zhí)行,并且按照中斷的級(jí)別來決定執(zhí)行的先后次序。
接下來參照?qǐng)D4到圖8,描述了本發(fā)明的第一實(shí)施例。
圖4示出了根據(jù)本發(fā)明的第一實(shí)施例的計(jì)算機(jī)系統(tǒng)開發(fā)平臺(tái)200(用于開發(fā)計(jì)算機(jī)系統(tǒng)的裝置)的結(jié)構(gòu),圖5示出了根據(jù)本發(fā)明的第一實(shí)施例的計(jì)算機(jī)系統(tǒng)開發(fā)平臺(tái)200的開發(fā)計(jì)算機(jī)系統(tǒng)的流程。參照?qǐng)D4,根據(jù)本發(fā)明的第一實(shí)施例,本發(fā)明向開發(fā)計(jì)算機(jī)系統(tǒng)的用戶,特別是向開發(fā)嵌入式或者控制用的計(jì)算機(jī)系統(tǒng)(例如交換機(jī)或者網(wǎng)絡(luò)防火墻)的用戶提供了一種計(jì)算機(jī)系統(tǒng)開發(fā)平臺(tái)200,該平臺(tái)包括以下部分編譯器210可以利用現(xiàn)有的編譯器210,把程序源代碼編譯為計(jì)算機(jī)可讀的二進(jìn)制目標(biāo)文件。
鏈接器220把目標(biāo)文件的數(shù)據(jù)和代碼分別提取出來并且整合為數(shù)據(jù)段和代碼段;把代碼段重定位并且按照需求分別填寫全局描述符表,中斷描述符表和任務(wù)段。把各代碼段和數(shù)據(jù)段以及全局描述符表、中斷描述符表和任務(wù)段封裝為磁盤映像文件。
燒寫器232操作IDE控制器,把數(shù)據(jù)段和代碼段數(shù)據(jù)段、代碼段以及全局描述符表,中斷描述符表和任務(wù)段構(gòu)成的磁盤映像文件寫入所開發(fā)的計(jì)算機(jī)系統(tǒng)的硬盤。
參照?qǐng)D5,根據(jù)本發(fā)明的第一實(shí)施例,本發(fā)明向開發(fā)計(jì)算機(jī)系統(tǒng)的用戶,特別是向開發(fā)嵌入式或者控制用的計(jì)算機(jī)系統(tǒng)(例如交換機(jī)或者網(wǎng)絡(luò)防火墻)的用戶提供了一種開發(fā)計(jì)算機(jī)系統(tǒng)的方法,該方法包括以下步驟首先利用現(xiàn)有的編譯器210,把程序源代碼編譯為計(jì)算機(jī)可讀的二進(jìn)制目標(biāo)文件。
然后,利用鏈接器220,把目標(biāo)文件的數(shù)據(jù)和代碼分別提取出來并且整合為數(shù)據(jù)段和代碼段;把代碼段重定位并且按照需求分別填寫全局描述符表,中斷描述符表和任務(wù)段。把各代碼段和數(shù)據(jù)段以及全局描述符表、中斷描述符表和任務(wù)段封裝為磁盤映像文件。
最后,利用燒寫器230操作IDE控制器,把數(shù)據(jù)段和代碼段數(shù)據(jù)段、代碼段以及全局描述符表,中斷描述符表和任務(wù)段構(gòu)成的磁盤映像文件寫入磁盤。
接下來參照?qǐng)D6、圖7和圖8,對(duì)該實(shí)施例的開發(fā)平臺(tái)的操作流程進(jìn)行描述。
圖6示出了一個(gè)可供調(diào)用的目標(biāo)文件庫222;圖7示出了根據(jù)本發(fā)明的第一實(shí)施例的代碼和數(shù)據(jù)儲(chǔ)存結(jié)構(gòu);圖8示出了根據(jù)本發(fā)明的第一實(shí)施例的鏈接方法。
如圖6所示的目標(biāo)文件庫222儲(chǔ)存于用戶的PC機(jī)中。該目標(biāo)文件庫222由很多實(shí)現(xiàn)不同功能的目標(biāo)文件構(gòu)成。這些目標(biāo)文件,都是由C/C++程序開發(fā)出來,并且通過現(xiàn)有的C語言編譯器編譯后形成的。這些程序各實(shí)現(xiàn)不同的功能,比如中斷處理、串口驅(qū)動(dòng)、網(wǎng)卡驅(qū)動(dòng)等等。該目標(biāo)文件庫222為鏈接器220提供訪問接口。
用戶在PC機(jī)上開發(fā)出C/C++應(yīng)用程序,并且使用現(xiàn)有的C語言編譯器編譯后成為目標(biāo)文件。
用戶使用PC機(jī)上的鏈接器220,選擇需要在目標(biāo)文件庫222中調(diào)用哪些功能的文件。
鏈接器220到目標(biāo)文件庫222中查找被用戶選中的功能文件。
用戶對(duì)目標(biāo)文件(包括應(yīng)用程序的目標(biāo)文件和目標(biāo)文件庫222中的文件)以及要建立的S-F系統(tǒng)的屬性進(jìn)行配置。配置的參數(shù)有如果用戶要?jiǎng)?chuàng)建多個(gè)S-F系統(tǒng),則哪些目標(biāo)文件是組合成一個(gè)S-F系統(tǒng)的;每個(gè)S-F系統(tǒng)的代碼是否可讀,每個(gè)S-F系統(tǒng)的數(shù)據(jù)是否可寫;每個(gè)S-F系統(tǒng)運(yùn)行在CPU的哪個(gè)級(jí)別。
鏈接器220逐個(gè)提取被用戶選中的目標(biāo)文件庫222中目標(biāo)文件以及應(yīng)用程序編譯出來的目標(biāo)文件中的代碼和數(shù)據(jù)。如圖7所示,把屬于同一個(gè)S-F系統(tǒng)的目標(biāo)文件的代碼整合到一個(gè)代碼段,把屬于同一個(gè)S-F系統(tǒng)的目標(biāo)文件的數(shù)據(jù)整合到一個(gè)數(shù)據(jù)段。
在各個(gè)目標(biāo)文件的符號(hào)(包括變量和函數(shù))表中查找全局變量和全局函數(shù),并且建一個(gè)全局的符號(hào)表,把各個(gè)目標(biāo)文件中的全局變量和全局函數(shù)的信息寫入全局符號(hào)表中。
把代碼里需要重定位的地方重定位。重定位時(shí),相應(yīng)的查找目標(biāo)文件內(nèi)的符號(hào)表以及全局符號(hào)表。
按照用戶填寫的參數(shù)填充全局描述符表,中斷描述符表和任務(wù)段。每個(gè)代碼段占用一個(gè)全局描述符表項(xiàng),每個(gè)數(shù)據(jù)段占用一個(gè)全局描述符表項(xiàng)。表項(xiàng)中包括段基址,段內(nèi)偏移地址,以及代碼運(yùn)行在CPU哪個(gè)級(jí)別等信息。如果被鏈接的目標(biāo)文件中有中斷模塊,則要在中斷描述符表中填寫含有中斷的代碼存放在全局描述符表中的位置。如果被鏈接的模塊中有任務(wù)存在,則要相應(yīng)的填寫任務(wù)狀態(tài)段任務(wù)段。
這樣,如圖8所示,鏈接器220就把多個(gè)目標(biāo)文件鏈接成為一個(gè)或多個(gè)可以實(shí)現(xiàn)特定功能的S-F系統(tǒng)。然后把一個(gè)或多個(gè)S-F系統(tǒng)以及全局描述符表、中斷描述符表和任務(wù)段封裝為磁盤映像文件。
用戶在PC機(jī)上使用燒寫器(IDE-Writer)230,控制IDE控制器(IDE Controller),把這個(gè)磁盤映像文件(包含一個(gè)或多個(gè)S-F系統(tǒng)以及全局描述符表、中斷描述符表和任務(wù)段)寫入嵌入式或者控制用的計(jì)算機(jī)中。
這個(gè)S-F系統(tǒng)就可以在嵌入式或者控制用的計(jì)算機(jī)中完成特定的功能。
接下來參照?qǐng)D9至圖13,描述了本發(fā)明的第二實(shí)施例,本發(fā)明的第二實(shí)施例是一個(gè)需要應(yīng)用串口輸入和輸出數(shù)據(jù)的系統(tǒng)。
圖9示出了根據(jù)本發(fā)明的第二實(shí)施例的計(jì)算機(jī)系統(tǒng)開發(fā)平臺(tái)300的結(jié)構(gòu);圖10示出了根據(jù)本發(fā)明的第二實(shí)施例的.imd文件格式;圖11示出了根據(jù)本發(fā)明的第二實(shí)施例的數(shù)據(jù)塊格式;圖12示出了根據(jù)本發(fā)明的第二實(shí)施例的磁盤映像文件格式;圖13示出了根據(jù)本發(fā)明的第二實(shí)施例的流程圖。
參照?qǐng)D9,根據(jù)本發(fā)明的第二實(shí)施例,對(duì)于圖4所示的第一實(shí)施例的計(jì)算機(jī)開發(fā)平臺(tái)200增加了加載器240,其中,加載器240包括存儲(chǔ)在嵌入式或者控制用計(jì)算機(jī)的磁盤中的加載器,用于把寫入磁盤的映像文件加載到內(nèi)存中執(zhí)行。
在IA-32架構(gòu)的計(jì)算機(jī)上運(yùn)行開發(fā)平臺(tái)(S10)。
用戶編寫出兩個(gè).cpp源程序一個(gè)程序?qū)Υ诔跏蓟⑶覍?shí)現(xiàn)對(duì)串口輸入的數(shù)據(jù)進(jìn)行轉(zhuǎn)換;另外一個(gè)是中斷程序,對(duì)不同類型的硬件中斷進(jìn)行相應(yīng)的處理(S20)。
使用現(xiàn)有的VC++編譯器,分別對(duì)這兩個(gè)程序進(jìn)行編譯,得到兩個(gè)計(jì)算機(jī)可以識(shí)別的目標(biāo)文件(S30)。
下面鏈接器對(duì)目標(biāo)文件做處理(S40)把屬于一個(gè)C系統(tǒng)的目標(biāo)文件存放入內(nèi)存中(S402)。在本例中,兩個(gè)目標(biāo)文件屬于一個(gè)C系統(tǒng),所以就把這兩個(gè)目標(biāo)文件都放入內(nèi)存。
把兩個(gè)目標(biāo)文件的代碼提取出來,整合成一個(gè)代碼段;把兩個(gè)目標(biāo)文件的數(shù)據(jù)提取出來,整合成一個(gè)數(shù)據(jù)段;根據(jù)新的代碼段中重定位符號(hào)的位置,相應(yīng)修改重定位表中的需要重定位的符號(hào)的偏移;把符號(hào)表中的全局標(biāo)量提取出來,建立全局符號(hào)表(S404)。
根據(jù)重定位表和符號(hào)表以及全局符號(hào)表,把代碼段中需要重定位的地方重定位(S406)。
填寫GDT(Global Descriptor Table,全局描述符表)、IDT(Interrupt Descriptor Table,中段描述符表)和TSS(Task StateSegment,任務(wù)狀態(tài)段)(S408)。在填寫GDT時(shí),每個(gè)代碼段占用一個(gè)表項(xiàng),每個(gè)數(shù)據(jù)段占用一個(gè)表項(xiàng)。代碼段和數(shù)據(jù)段在內(nèi)存中占用獨(dú)立的空間,尋址方式為段基址加段內(nèi)偏移,而且最大的段內(nèi)偏移就是該段的長(zhǎng)度(如果有其他目標(biāo)文件構(gòu)成另外一個(gè)C系統(tǒng),則重復(fù)以上過程)。
把所有的數(shù)據(jù)段、代碼段以及GDT、IDT、TSS封裝成如圖10所示的.imd文件(S410)。其中,每一個(gè)數(shù)據(jù)塊遵循如圖11所示的格式。
在.imd文件中加入加載信息(LOADER),成為如圖12所示的磁盤映像文件(S412)。該磁盤映像文件中包含了寫入器可以識(shí)別的加載信息和圖10所示的.imd文件的數(shù)據(jù)塊。
MBR(LBA=0)存放的是Loader的加載信息,負(fù)責(zé)將存于LBA1~LBA4扇區(qū)上的Loader程序以及存于LBA5的鏡像頭數(shù)據(jù)加載進(jìn)RAM。
LBA1~LBA4扇區(qū)的Loader負(fù)責(zé)將用戶數(shù)據(jù)(代碼、數(shù)據(jù)等,存于起始扇區(qū)為L(zhǎng)BA=6的連續(xù)扇區(qū)中)搬運(yùn)到指定的RAM空間。其中,將每個(gè)數(shù)據(jù)塊中的有效載荷搬運(yùn)至的目標(biāo)地址位于數(shù)據(jù)塊的頭信息中。
LBA5上存儲(chǔ)的鏡像頭包含了數(shù)據(jù)塊大小、起始扇區(qū)號(hào)等Loader參數(shù);
MBR(LBA0)~LBA5是完整的6個(gè)扇區(qū),即512×6個(gè)字節(jié)。
數(shù)據(jù)塊1~N封裝了要運(yùn)行的應(yīng)用程序代碼、數(shù)據(jù)、GDT、IDT等。其中,數(shù)據(jù)塊1對(duì)齊LBA=6的扇區(qū)的首地址,其余的數(shù)據(jù)塊長(zhǎng)度為32字節(jié)的整數(shù)倍,在IDE上的存放位置對(duì)齊扇區(qū)的32地址邊界即,扇區(qū)首地址、32、64、96、128、160、192......。要求數(shù)據(jù)塊連續(xù)存放。取扇區(qū)的32字節(jié)邊界的原因是數(shù)據(jù)塊的頭信息為32字節(jié),必須保證頭信息不被扇區(qū)分開。
使用燒寫器把磁盤映像文件寫入磁盤(S50)。
根據(jù)本發(fā)明的計(jì)算機(jī)系統(tǒng)開發(fā)裝置或開發(fā)方法所開發(fā)的計(jì)算機(jī)系統(tǒng)與現(xiàn)有的計(jì)算機(jī)系統(tǒng)相比,在以下安全性方面有改進(jìn)防止緩沖區(qū)溢出攻擊方面、以及使用硬件機(jī)制保證數(shù)據(jù)安全方面。以下將對(duì)此予以詳細(xì)說明。
首先,每個(gè)目標(biāo)文件的代碼和數(shù)據(jù)分別提取出來,并整合為代碼段和數(shù)據(jù)段,并且設(shè)定代碼段和數(shù)據(jù)段在內(nèi)存中分別獨(dú)立的占用兩段空間,并且這兩段內(nèi)存空間是不連續(xù)的,代碼和數(shù)據(jù)的尋址分別通過各自的段基址加上段內(nèi)偏移來實(shí)現(xiàn)。在全局描述符表填寫代碼段和數(shù)據(jù)段在內(nèi)存中的段基地址,中斷代碼的信息寫入中斷描述符表中。全局描述符和中斷描述符表的信息只有運(yùn)行在CPU0級(jí)的程序可以讀取。這樣,非0級(jí)的程序就不會(huì)得知代碼段和數(shù)據(jù)段在內(nèi)存中的位置。另外,把代碼和數(shù)據(jù)分別整合為代碼段和數(shù)據(jù)段有利于對(duì)代碼和數(shù)據(jù)進(jìn)行分別控制,代碼段是否可讀,數(shù)據(jù)段是否可寫都是可以被用戶設(shè)定的。如果有應(yīng)用程序?qū)ο到y(tǒng)進(jìn)行緩沖區(qū)溢出攻擊,這樣的系統(tǒng)實(shí)現(xiàn)方法可以很大程度上防止有惡意代碼執(zhí)行。
其次,可以在全局描述符表中根據(jù)需求設(shè)置每個(gè)S-F系統(tǒng)運(yùn)行在CPU的哪個(gè)級(jí)別,利用硬件的保護(hù)機(jī)制來使S-F系統(tǒng)受到保護(hù)。比如包含用戶密碼等信息的程序就可以運(yùn)行在0級(jí)上。
最后,系統(tǒng)開始執(zhí)行之后,在嵌入式或者控制用的計(jì)算機(jī)上不能再執(zhí)行其他的程序。也就是說,在使用該系統(tǒng)設(shè)計(jì)方法的計(jì)算機(jī)上運(yùn)行程序,只能是把程序的目標(biāo)文件按照上述步驟生成S-F系統(tǒng),才能在計(jì)算機(jī)上運(yùn)行。所以該系統(tǒng)方法很適合使用在需要安全性保證很高的嵌入式網(wǎng)關(guān)或者網(wǎng)絡(luò)路由器等計(jì)算機(jī)中。
根據(jù)本發(fā)明的計(jì)算機(jī)系統(tǒng)開發(fā)裝置或方法通過利用已有的程序語言和編譯環(huán)境,通過提供自己的加載器、鏈接器和寫入器,使用戶能夠快速地開發(fā)自己的專用系統(tǒng),而不需要操作系統(tǒng)的支持。
根據(jù)本發(fā)明的計(jì)算機(jī)系統(tǒng)開發(fā)裝置或方法所開發(fā)的計(jì)算機(jī)系統(tǒng),其特點(diǎn)和優(yōu)越性在于以下方面系統(tǒng)構(gòu)成簡(jiǎn)單,只由一些可以分別獨(dú)立完成某些功能的S-F模塊組成。系統(tǒng)中只存在為了完成某些功能所需要的模塊,簡(jiǎn)單的系統(tǒng)構(gòu)成有利于系統(tǒng)運(yùn)行效率的提高。
系統(tǒng)實(shí)現(xiàn)簡(jiǎn)單。只需要把源代碼通過編譯器(可以使用現(xiàn)有的)編譯成目標(biāo)文件,然后鏈接成磁盤映像文件,然后燒寫如磁盤中即可。
系統(tǒng)的可定制性很強(qiáng),用戶可以選擇需要的功能模塊。這樣的模塊化以及可定制的系統(tǒng)設(shè)計(jì)很適合應(yīng)用在嵌入式或者控制用的計(jì)算機(jī)系統(tǒng)中。
S-F系統(tǒng)的代碼段和數(shù)據(jù)段在內(nèi)存中使用段基址加上段內(nèi)偏移來尋址,并且存放的位置不對(duì)應(yīng)用程序公開,有利于防止一部分緩沖區(qū)溢出攻擊。
充分利用Intel的硬件保護(hù)機(jī)制,設(shè)置S-F系統(tǒng)運(yùn)行在CUP的哪個(gè)級(jí)別,利用硬件機(jī)制保護(hù)S-F系統(tǒng)安全。
不同于現(xiàn)有的計(jì)算機(jī)系統(tǒng)在內(nèi)存32位地址空間尋址,該系統(tǒng)在內(nèi)存中采用段基址加上段內(nèi)偏移來尋址,這使得系統(tǒng)有更高的安全性,使其更適合應(yīng)用在網(wǎng)絡(luò)中的嵌入式設(shè)備中,比如交換機(jī)或者網(wǎng)絡(luò)防火墻等,這是因?yàn)榫W(wǎng)絡(luò)節(jié)點(diǎn)設(shè)備非常容易受到攻擊。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種用于開發(fā)計(jì)算機(jī)系統(tǒng)的裝置,其特征在于,包括編譯器,用于將源程序編譯成目標(biāo)文件;鏈接器,用于將所述目標(biāo)文件鏈接成磁盤映像文件,所述磁盤映像文件包括至少一個(gè)數(shù)據(jù)塊;以及寫入器,用于將所述磁盤映像文件寫入所開發(fā)的計(jì)算機(jī)系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于,還包括加載器,用于將所述磁盤映像文件中的所述至少一個(gè)數(shù)據(jù)塊加載入所開發(fā)的計(jì)算機(jī)系統(tǒng)的內(nèi)存中。
3.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述編譯器是通用編譯器。
4.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述鏈接器利用所述編譯器輸出的所述目標(biāo)文件,根據(jù)用戶的配置,通過重新進(jìn)行地址分配和任務(wù)分配,將所開發(fā)的計(jì)算機(jī)系統(tǒng)分成多個(gè)子系統(tǒng),所述多個(gè)子系統(tǒng)相互獨(dú)立,不能互相訪問。
5.根據(jù)權(quán)利要求4所述的裝置,其特征在于,利用所開發(fā)的計(jì)算機(jī)系統(tǒng)中的處理器的保護(hù)模式中的硬件段機(jī)制實(shí)現(xiàn)所述多個(gè)子系統(tǒng)的相互獨(dú)立,通過所述硬件段機(jī)制,使所述多個(gè)子系統(tǒng)中的每一個(gè)子系統(tǒng)都采用獨(dú)立的代碼地址和數(shù)據(jù)地址,使得代碼和數(shù)據(jù)相互分離,并利用所開發(fā)的計(jì)算機(jī)系統(tǒng)中的處理器的保護(hù)模式中的代碼段寄存器和數(shù)據(jù)段寄存器來實(shí)現(xiàn)所述代碼和所述數(shù)據(jù)的所述相互分離。
6.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述鏈接器生成的所述磁盤映像文件是機(jī)器可執(zhí)行的程序代碼,所述代碼中包含了所述至少一個(gè)數(shù)據(jù)塊和所述寫入器可以識(shí)別的加載信息,所述加載信息包含了任務(wù)的分配數(shù)據(jù)、段的分配數(shù)據(jù)、以及所述各個(gè)代碼和數(shù)據(jù)的段地址和偏移地址。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述加載器是啟動(dòng)裝置,根據(jù)所述磁盤映像文件的所述加載信息,將所述磁盤映像文件加載到所開發(fā)的計(jì)算機(jī)系統(tǒng)中的處理器的保護(hù)模式中運(yùn)行。
8.一種用于開發(fā)計(jì)算機(jī)系統(tǒng)的方法,其特征在于,包括編譯步驟,將源程序編譯成目標(biāo)文件;鏈接步驟,將所述目標(biāo)文件鏈接成磁盤映像文件,所述磁盤映像文件包括至少一個(gè)數(shù)據(jù)塊;以及寫入步驟,將所述磁盤映像文件寫入所開發(fā)的計(jì)算機(jī)系統(tǒng)。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,還包括加載步驟,將所述磁盤映像文件中的所述至少一個(gè)數(shù)據(jù)塊加載入所開發(fā)的計(jì)算機(jī)系統(tǒng)的內(nèi)存中。
10.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述編譯步驟是通用編譯步驟。
11.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述鏈接步驟利用所述編譯步驟輸出的所述目標(biāo)文件,根據(jù)用戶的配置,通過重新進(jìn)行地址分配和任務(wù)分配,將所開發(fā)的計(jì)算機(jī)系統(tǒng)分成多個(gè)子系統(tǒng),所述多個(gè)子系統(tǒng)相互獨(dú)立,不能互相訪問。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,利用所開發(fā)的計(jì)算機(jī)系統(tǒng)中的處理器的保護(hù)模式中的硬件段機(jī)制實(shí)現(xiàn)所述多個(gè)子系統(tǒng)的相互獨(dú)立,通過所述硬件段機(jī)制,使所述多個(gè)子系統(tǒng)中的每一個(gè)子系統(tǒng)都采用了獨(dú)立的代碼地址和數(shù)據(jù)地址,使得代碼和數(shù)據(jù)相互分離,并利用所開發(fā)的計(jì)算機(jī)系統(tǒng)中的處理器的保護(hù)模式中的代碼段寄存器和數(shù)據(jù)段寄存器來實(shí)現(xiàn)所述代碼和所述數(shù)據(jù)的所述相互分離。
13.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述鏈接步驟生成的所述磁盤映像文件是機(jī)器可執(zhí)行的程序代碼,所述代碼中包含了所述至少一個(gè)數(shù)據(jù)塊和所述寫入器可以識(shí)別的加載信息,所述加載信息包含了任務(wù)的分配數(shù)據(jù)、段的分配數(shù)據(jù)、以及所述各個(gè)代碼和數(shù)據(jù)的段地址和偏移地址。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述加載步驟是啟動(dòng)步驟,根據(jù)所述磁盤映像文件的加載信息,將所述磁盤映像文件加載到所開發(fā)的計(jì)算機(jī)系統(tǒng)中的處理器的保護(hù)模式中運(yùn)行。
全文摘要
本發(fā)明公開了一種用于開發(fā)計(jì)算機(jī)系統(tǒng)的裝置,其特征在于,包括編譯器,用于將源程序編譯成目標(biāo)文件;鏈接器,用于將所述目標(biāo)文件鏈接成磁盤映像文件,所述磁盤映像文件包括至少一個(gè)數(shù)據(jù)塊;以及寫入器,用于將所述磁盤映像文件寫入所開發(fā)的計(jì)算機(jī)系統(tǒng)。該開發(fā)裝置通過利用已有的程序語言和編譯環(huán)境,通過提供自己的加載器、鏈接器和寫入器,使用戶能夠快速地開發(fā)自己的專用系統(tǒng),而不需要操作系統(tǒng)的支持。根據(jù)該開發(fā)裝置所開發(fā)的計(jì)算機(jī)系統(tǒng)與現(xiàn)有的計(jì)算機(jī)系統(tǒng)相比,在以下安全性方面有改進(jìn)防止緩沖區(qū)溢出攻擊方面、以及使用硬件機(jī)制保證代碼和數(shù)據(jù)安全方面。
文檔編號(hào)G06F1/00GK1912828SQ200510087748
公開日2007年2月14日 申請(qǐng)日期2005年8月8日 優(yōu)先權(quán)日2005年8月8日
發(fā)明者馮登國(guó), 荊繼武, 王晶 申請(qǐng)人:中國(guó)科學(xué)院研究生院