版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康?建立對(duì)系統(tǒng)調(diào)用接口的深入認(rèn)識(shí)?掌握系統(tǒng)調(diào)用的基本過程?能完成系統(tǒng)調(diào)用的全面控制?為后續(xù)實(shí)驗(yàn)做準(zhǔn)備實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容此次實(shí)驗(yàn)的基本內(nèi)容是:在Linux0.11上添加兩個(gè)系統(tǒng)調(diào)用,并編寫兩個(gè)簡(jiǎn)單的應(yīng)用程序測(cè)試它們。iam()第一個(gè)系統(tǒng)調(diào)用是iam(),其原型為:intiam(constname)完成的功能是將字符串參數(shù)name的內(nèi)容拷貝到內(nèi)核中保存下來。要求name的長(zhǎng)度不能超過23個(gè)字符。返回值是拷貝的字符數(shù)。如果name
2、的字符個(gè)數(shù)超過了23,則返回“1”,并置errno為EINVAL。在kernalwho.c中實(shí)現(xiàn)此系統(tǒng)調(diào)用。whoami()第二個(gè)系統(tǒng)調(diào)用是whoami(),其原型為:intwhoami(nameunsignedintsize)它將內(nèi)核中由iam()保存的名字拷貝到name指向的用戶地址空間中,同時(shí)確保不會(huì)對(duì)name越界訪存(name的大小由size說明)。返回值是拷貝的字符數(shù)。如果size小于需要的空間,則返回“1”,并置errno為
3、EINVAL。也是在kernalwho.c中實(shí)現(xiàn)。測(cè)試程序測(cè)試程序運(yùn)行添加過新系統(tǒng)調(diào)用的Linux0.11,在其環(huán)境下編寫兩個(gè)測(cè)試程序iam.c和whoami.c。最終的運(yùn)行結(jié)果是:在通常情況下,調(diào)用系統(tǒng)調(diào)用和調(diào)用一個(gè)普通的自定義函數(shù)在代碼上并沒有什么區(qū)別,但調(diào)用后發(fā)生的事情有很大不同。調(diào)用自定義函數(shù)是通過call指令直接跳轉(zhuǎn)到該函數(shù)的地址,繼續(xù)運(yùn)行。而調(diào)用系統(tǒng)調(diào)用,是調(diào)用系統(tǒng)庫(kù)中為該系統(tǒng)調(diào)用編寫的一個(gè)接口函數(shù),叫API(Applica
4、tionProgrammingInterface)。API并不能完成系統(tǒng)調(diào)用的真正功能,它要做的是去調(diào)用真正的系統(tǒng)調(diào)用,過程是:?把系統(tǒng)調(diào)用的編號(hào)存入EAX?把函數(shù)參數(shù)存入其它通用寄存器?觸發(fā)0x80號(hào)中斷(int0x80)0.11的lib目錄下有一些已經(jīng)實(shí)現(xiàn)的API。Linus編寫它們的原因是在內(nèi)核加載完畢后,會(huì)切換到用戶模式下,做一些初始化工作,然后啟動(dòng)shell。而用戶模式下的很多工作需要依賴一些系統(tǒng)調(diào)用才能完成,因此在內(nèi)核中實(shí)現(xiàn)
5、了這些系統(tǒng)調(diào)用的API。我們不妨看看libclose.c,研究一下close()的API:#define__LIBRARY__#include_syscall1(intcloseintfd)其中_syscall1是一個(gè)宏,在includeunistd.h中定義。將_syscall1(intcloseintfd)進(jìn)行宏展開,可以得到:intclose(intfd)long__res__asm__volatile(“int$0x80“:“=
6、a“(__res):“0“(__NR_close)“b“((long)(fd)))if(__res=0)return(int)__reserrno=__resreturn1這就是API的定義。它先將宏__NR_close存入EAX,將參數(shù)fd存入EBX,然后進(jìn)行0x80中斷調(diào)用。調(diào)用返回后,從EAX取出返回值,存入__res,再通過對(duì)__res的判斷決定傳給API的調(diào)用者什么樣的返回值。其中__NR_close就是系統(tǒng)調(diào)用的編號(hào),在in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---io系統(tǒng)調(diào)用開銷比較
- unix系統(tǒng)調(diào)用大全
- ioctl系統(tǒng)調(diào)用流程
- linux-系統(tǒng)調(diào)用函數(shù)
- 空調(diào)用貫流風(fēng)機(jī)系統(tǒng)CFD分析及實(shí)驗(yàn)研究.pdf
- 操作系統(tǒng)實(shí)驗(yàn)一_動(dòng)態(tài)鏈接庫(kù)的建立與調(diào)用
- msdos 系統(tǒng)功能調(diào)用表
- dos系統(tǒng)功能調(diào)用表
- 作業(yè)2-添加系統(tǒng)調(diào)用
- linux系統(tǒng)調(diào)用fork用法詳解-
- 基于系統(tǒng)調(diào)用的主機(jī)安全研究.pdf
- 調(diào)用監(jiān)控系統(tǒng)管理規(guī)定
- 系統(tǒng)調(diào)用函數(shù)庫(kù)分析及實(shí)例
- 程序調(diào)用.txt
- 程序調(diào)用.txt
- dede調(diào)用代碼
- 基于Windows系統(tǒng)調(diào)用的異常檢測(cè).pdf
- 添加系統(tǒng)調(diào)用(模塊添加法2.6內(nèi)核)
- 空調(diào)用分離式熱管換熱器的實(shí)驗(yàn)研究.pdf
- 基于系統(tǒng)調(diào)用的異常入侵檢測(cè)系統(tǒng)研究.pdf
評(píng)論
0/150
提交評(píng)論