Linux 核心設計: 賦予應用程式生命的系統呼叫 === :::warning 注意!這是上課筆記 ::: :::info 原始課程在這裡 - [影片](https://www.youtube.com/watch?v=rPWt6KgL8uQ) - [講義](https://hackmd.io/@sysprog/linux-syscall?type=view) Original by [jserv](http://wiki.csie.ncku.edu.tw/User/jserv) ::: --- | Section | Time| Description | | -------- | -------- | -------- | | 1 | [00:00:11](https://youtu.be/rPWt6KgL8uQ?si=ZHyjs72Rm0n2Hpn0&t=11) | 1. linux 1992 年釋出原始碼(92共識)<br>2. tux web server 讓 linux 差點走歪路。<br>3. 大約有380 system call 支持應用程式。<br>4. sendfile()的範例。| | 2 | [00:16:13](https://youtu.be/rPWt6KgL8uQ?si=jZj4xc60EY22cE_d&t=973) | 1. 論文 "Analyzing a Decade of Linux System Calls".<br>2. POSIX規範 for OS 和 自由軟體 | | 3 | [00:27:34](https://youtu.be/rPWt6KgL8uQ?si=NsR13h_fcjVz15dx&t=1654) | 1. ltrace() for library call.<br>2. hello world 的範例。| | 4 | [00:39:14](https://youtu.be/rPWt6KgL8uQ?si=D9AM1i92Fe1UJ0ez&t=2354) | 1. call gate.<br>2. priority and privileged. | | 5 | [00:47:58](https://youtu.be/rPWt6KgL8uQ?si=vrCN3oz_eQsJgMro&t=2878) | 1. 文章 "System Calls Make the World Go Round".<br>2. strace() trace system call.<br>3. 直接 call system call write(). | | 6 | [01:00:50](https://youtu.be/rPWt6KgL8uQ?si=0XEiTQ_E3RxZjbG2&t=3650) | 1. syscall().<br>2. unix 2038 問題。<br>3. arm and intel 架構的 system call. | | 7 | [01:10:49](https://youtu.be/rPWt6KgL8uQ?si=jGzWrwsDxMbCa7a6&t=4249) | 1. 文章 "Computer Science from the Bottom Up: System Calls". | | 8 | [01:19:27](https://youtu.be/rPWt6KgL8uQ?si=yPKK2i_3-eMtxY4N&t=4767) | 1. 透過 kprobes + eBPF 來追蹤系統呼叫。<br>2. 介紹 eBPF。<br>3. eBPF is in-kernel virtual machine.<br>4. demo.<br>5. nc(). | | 9 | [01:32:20](https://youtu.be/rPWt6KgL8uQ?si=1Y-xu1mY4bH5OCOl&t=5540) | 1. strace()/ptrace() 成本很高。<br>2. 繼續實驗 eBPF。<br>3. 文章解析 “Introducing eBPF Kernel probes”。| | 10 | [01:42:06](https://youtu.be/rPWt6KgL8uQ?si=qAON1Kd9l-lW9iBb&t=6126) | 1. Linux 核心對系統呼叫的實作機制。<br>2. 文章 "Anatomy of a system call, part 1".<br>3. syscall table entries. | | 11 | [01:59:31](https://youtu.be/rPWt6KgL8uQ?si=mTwMuFpY-zChZS7B&t=7171) | 1. vsyscall and vDSO.<br>2. git 的函式庫(使用 ldd 指令)。<br>3. 文章 “什麼是 Linux vDSO 與 vsyscall?——發展過程”.<br>4. gettimeofday().<br>5. AMD 發明 x86_64 syscall.<br>6. 發展 vsyscall 的原因:降低CPU模式切換。 | | 12 | [02:16:30](https://youtu.be/rPWt6KgL8uQ?si=3xLgbFBau3o2JCAA&t=8190) | 1. 虛擬記憶體 for user mode read only.<br>2. vDSO for debugging.<br>3. ALSR 的導入避免固定定址攻擊。<br>4. HRT(high resolution timer) 的應用。| | 13 | [02:34:23](https://youtu.be/rPWt6KgL8uQ?si=tOsdMaET-OZd4G-Z&t=9263) | 1. 文章 “gettimeofday、clockgettime 以及不同時鐘源的影響”。<br>2. 文章 “vDSO on arm64”.<br>3. 總結。