日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux system函数传参,Linux系统调用例程system_call和参数传递

發布時間:2024/7/19 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux system函数传参,Linux系统调用例程system_call和参数传递 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系統調用接口調用“int $Ox8O”指令進入內核并準各了相關參數后,剩下的工作就由系統調用例程來進行。Linux定義的系統調用 例程的入口為system_call。下面具體介紹system_call所做的工作。

system_call是用匯編語言編寫的,在i386體系中,其前半部分代碼如下:

這部分代碼的任務是傳遞系統調用號和參數。

前面談到,為了識別具體的內核服務例程,必須用寄存器eax傳遞系統調用號。除此之外,某些內核服務例程還需要一些由用戶提供 的參數。例如,內核服務例程mmap()除系統調用號之外還需要6個參數。

傳遞參數的任務是由處理器的寄存器來完成的。

在IJbO系統中,用來進行參數傳遞工作的寄存器依次為eax、ebx、ecx、edx、est和edi。其中,eax被指定用于系統調用號的傳遞。 所以,在函數system_call中,一開始就使用宏SAVE_ALL把處理器的各寄存器壓棧,以便以后系統調用服務例程可從內核堆棧中根據 需要找到相關的參數。

可見,為了傳遞參數,在系統調用接口中就應把所有參數按照規定事先存入各寄存器。至于參數多于6個的情況,可采用在內存中設 置一個參數緩沖區,而讓處理器的寄存器作為指針指向的這個參數緩沖區的辦法來解決。

接下來,程序對進程傳遞的系統調用號進行有效性檢查。如果無效,則系統調用中止:

如果有效,則根據寄存器eax提供的系統調用號并通過Syscall_table來調用對應的內核服務例程:call*sys_call_table(0,% eax,4)

當服務例程結束時,system_call從eax獲得返回值,然后跳轉到返回函數ret_from_sys_call返回用戶態:

movl % eax,24(% esp)

jmp ret_from_sys_call

:

總結

以上是生活随笔為你收集整理的linux system函数传参,Linux系统调用例程system_call和参数传递的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。