iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

C 語言筆記系列 第 12

[C 語言筆記--Day12] system call 的執行步驟

為什麼需要 system call

因為有些行為是很危險的,

所以 C 以提供 C library 的方式來讓寫程式的人可以做到一些較高權限的事情

不過也並非所有的 library 內容都是為了提供 system call

1. 呼叫 function

步驟一為,一個程式執行到了 wrapper function
( C library 中,會需要執行 system call 的 funciton )

2. 傳遞 arguments

在 wrapper 傳遞到 system call 之前,必須要把資料給放到特定的 register 裡

3. 指定要哪一個 system call 的方式

以 x86-32 為例,wrapper function 先把 register %eax

放入 system call 的編號,這樣真的要執行 system call

的時候就知道要用哪一個 system call 了

4. the trap instruction

trap 是一個 x86-32 的 instruction,執行完這個 instruction 後

就會開始真的執行 system call 的內容了

5. 真的執行 system call 的內容

a) 把 register 存放到 kernel stack 中(跟一般的 function 對待 callee-saved register 一樣)

b) 檢查 system call 的編號(先前被 wrapper function 放在 %eax 中)

c) 根據 system call 的編號,執行相對應的行為

d) 復元 register 的值,對應於步驟 a)

e) return 回 wrapper function

6. 回傳值

如果執行的過程有出錯, wrapper function 會把 global variable errno set 好,

wrapper function return 回去

參考資料

The Linux Programming Interface: A Linux and UNIX System Programming Handbook


上一篇
[C 語言筆記--Day11] Makefile 的粗略筆記
下一篇
[C 語言筆記--Day13] Pointers to Functions
系列文
C 語言筆記30

尚未有邦友留言

立即登入留言