資源描述:
《linux系統(tǒng)調(diào)用》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、www.linuxidc.comChapter5:系統(tǒng)調(diào)用¢為什么需要系統(tǒng)調(diào)用¢相關(guān)數(shù)據(jù)和代碼¢例:系統(tǒng)調(diào)用getuid()的實(shí)現(xiàn)¢添加一個(gè)系統(tǒng)調(diào)用mysyscall¢再實(shí)現(xiàn)一個(gè)稍復(fù)雜的系統(tǒng)調(diào)用邊干邊學(xué)——Linux內(nèi)核指導(dǎo)Linux公社(LinuxIDC.com)是包括Ubuntu,Fedora,SUSE技術(shù),最新IT資訊等Linux專業(yè)類網(wǎng)站。www.linuxidc.comLinux公社www.Linuxidc.com¢L(zhǎng)inux公社(LinuxIDC.com)于2006年9月25日注冊(cè)并開通網(wǎng)站,L
2、inux現(xiàn)在已經(jīng)成為一種廣受關(guān)注和支持的一種操作系統(tǒng),IDC是互聯(lián)網(wǎng)數(shù)據(jù)中心,LinuxIDC就是關(guān)于Linux的數(shù)據(jù)中心?!長(zhǎng)inuxIDC.com提供包括Ubuntu,F(xiàn)edora,SUSE技術(shù),以及最新IT資訊等Linux專業(yè)類網(wǎng)站。邊干邊學(xué)——Linux內(nèi)核指導(dǎo)Linux公社(LinuxIDC.com)是包括Ubuntu,Fedora,SUSE技術(shù),最新IT資訊等Linux專業(yè)類網(wǎng)站。www.linuxidc.com為什么需要系統(tǒng)調(diào)用(1)邊干邊學(xué)——Linux內(nèi)核指導(dǎo)Linux公社(LinuxID
3、C.com)是包括Ubuntu,Fedora,SUSE技術(shù),最新IT資訊等Linux專業(yè)類網(wǎng)站。www.linuxidc.com為什么需要系統(tǒng)調(diào)用(2)邊干邊學(xué)——Linux內(nèi)核指導(dǎo)Linux公社(LinuxIDC.com)是包括Ubuntu,Fedora,SUSE技術(shù),最新IT資訊等Linux專業(yè)類網(wǎng)站。www.linuxidc.com相關(guān)數(shù)據(jù)和代碼¢arch/i386/kernel/traps.c¢arch/i386/kernel/entry.S系統(tǒng)調(diào)用時(shí)的內(nèi)核棧sys_call_tablesystem
4、_call和ret_from_sys_call¢include/linux/unistd.h系統(tǒng)調(diào)用編號(hào)宏定義展開系統(tǒng)調(diào)用glibc展開系統(tǒng)調(diào)用INLINE_SYSCALL(getuid,0);邊干邊學(xué)——Linux內(nèi)核指導(dǎo)Linux公社(LinuxIDC.com)是包括Ubuntu,Fedora,SUSE技術(shù),最新IT資訊等Linux專業(yè)類網(wǎng)站。www.linuxidc.com系統(tǒng)調(diào)用時(shí)的內(nèi)核棧內(nèi)核棧用戶棧向內(nèi)中斷向外返回用戶空間ss函數(shù)返回地址用戶空間espeipEFLAGS局部變量用戶空間cs中斷前及
5、iret(系統(tǒng)調(diào)用返回)后用戶空間eip可用空間的esp系統(tǒng)調(diào)用號(hào)用戶ss中斷后(SAVE_ALL前)及iret前(RESTORE_ALL后)的可用空間esp陷入內(nèi)核時(shí),系統(tǒng)自動(dòng)從當(dāng)前進(jìn)程的TSS(任task_struct務(wù)狀態(tài)段)中獲得內(nèi)核棧的SS和ESP,并完成棧切換內(nèi)核ss邊干邊學(xué)——Linux內(nèi)核指導(dǎo)Linux公社(LinuxIDC.com)是包括Ubuntu,Fedora,SUSE技術(shù),最新IT資訊等Linux專業(yè)類網(wǎng)站。www.linuxidc.com系統(tǒng)調(diào)用時(shí)的內(nèi)核棧18*Stacklayou
6、tin'ret_from_system_call':19*ptraceneedstohaveallregsonthestack.20*iftheorderhereischanged,itneedstobe21*updatedinfork.c:copy_process,signal.c:do_signal,22*ptrace.candptrace.h23*24*0(%esp)-%ebx25*4(%esp)-%ecx26*8(%esp)-%edx27*C(%esp)-%esi28*10(%esp)-%edi29
7、*14(%esp)-%ebp30*18(%esp)-%eax31*1C(%esp)-%ds32*20(%esp)-%es33*24(%esp)-orig_eax34*28(%esp)-%eip35*2C(%esp)-%cs36*30(%esp)-%eflags37*34(%esp)-%oldesp38*38(%esp)-%oldss39*40*"current"isinregister%ebxduringanyslowentries.邊干邊學(xué)——Linux內(nèi)核指導(dǎo)Linux公社(LinuxIDC.com)是
8、包括Ubuntu,Fedora,SUSE技術(shù),最新IT資訊等Linux專業(yè)類網(wǎng)站。www.linuxidc.com系統(tǒng)調(diào)用時(shí)的內(nèi)核棧#defineSAVE_ALLcld;pushl%es;pushl%ds;pushl%eax;pushl%ebp;pushl%edi;pushl%esi;pushl%edx;pushl%ecx;pushl%ebx;movl$(__KERNEL_DS),%edx;