91精品一区二区三区久久久久久_欧美一级特黄大片色_欧美一区二区人人喊爽_精品一区二区三区av

位置:51電子網 » 技術資料 » 嵌入式系統

Linux系統調用例程system_call和參數傳遞

發布時間:2009/2/18 0:00:00 訪問次數:2162

  系統調用接口調用“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

  歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)



  系統調用接口調用“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

  歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)



相關IC型號

熱門點擊

 

推薦技術資料

DFRobot—玩的就是
    如果說新車間的特點是“靈動”,FQPF12N60C那么... [詳細]
版權所有:51dzw.COM
深圳服務熱線:13692101218  13751165337
粵ICP備09112631號-6(miitbeian.gov.cn)
公網安備44030402000607
深圳市碧威特網絡技術有限公司
付款方式


 復制成功!
淅川县| 平阳县| 乐都县| 临汾市| 武鸣县| 通道| 沾益县| 德庆县| 威海市| 彭泽县| 蛟河市| 洛扎县| 宁乡县| 澎湖县| 荆门市| 酒泉市| 绍兴市| 田阳县| 和田市| 通辽市| 连江县| 电白县| 昭通市| 库尔勒市| 甘孜| 滦南县| 辉南县| 兴安盟| 治多县| 偃师市| 增城市| 福安市| 博客| 德阳市| 会昌县| 寿光市| 鄢陵县| 达拉特旗| 高台县| 广水市| 长阳|