網(wǎng)絡套接字入口函數(shù)
【文章福利】小編推薦自己的Linux內(nèi)核技術交流群:【891587639】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ?


套接字系統(tǒng)調(diào)用如何到達sys_socketcall
accept函數(shù)為例系統(tǒng)調(diào)用中參數(shù)從用戶態(tài)向內(nèi)核態(tài)的傳遞是通過寄存器完成的,eax表示系統(tǒng)調(diào)用,ebx表示第一個參數(shù),ecx表示第二個參數(shù),edx表示第三個參數(shù)(主要針對socke.S)
第一層:accept.s文件
(glibc函數(shù)庫)sysdeps\unis\sysv\linux\accept.S
第二層:socket.S文件
重點看:
movl $SYS_ify(socketcall), %eax /* System call number in %eax. ?*/
展開SYS_iff()宏(glibc函數(shù)庫: \sysdeps\unix\sysdep.h)
預處理后為:
所以:
這樣套接字系統(tǒng)調(diào)用進入到正確的函數(shù)中了。
那么第一個參數(shù)是識別系統(tǒng)調(diào)用的具體函數(shù)的,這個參數(shù)在socket.S(glibc庫)中:
關于SOCKOP_accept:
查看(glibc庫:\sysdeps\unix\sysv\linux\socketcall.h)
在linux內(nèi)核(include/linux/net.h):
第二個參數(shù)
在襪子。S中:以指針的方式設置了sys_socketcall的第二個參數(shù)
設置完以上的系統(tǒng)調(diào)用號還有參數(shù)后進入軟中斷:int $0x80,進入了內(nèi)核態(tài)進行處理
第三層:entry.S文件
以上源碼來自:linux內(nèi)核源碼1.2.12
格列克-2.0.1
