目的: 檢驗學員對 C 語言程式設計 的認知
1
考慮到以下程式碼:
指出存在的問題和提出修正機制,需要用 C99/C11 規格解釋。
C99/C11 6.2.4
object referred out of lifetime is undefined behavior
延伸問題: 在 Common Vulnerabilities and Exposure (CVE) 找出類似上述不當的 string literal 操作,而導致的安全漏洞,並加以探討
2
指標篇 提到 signal 系統呼叫的原型宣告:
該如何解析呢?
提示: 參閱 manpage: signal(2)
延伸問題: 解釋 signal(2) 的作用,並在 GitHub 找出應用案例
3
Linux 核心程式碼 include/linux/list.h 提到以下程式碼,為何每個 head
使用時都要先加上 ()
呢?
延伸問題: 在 Linux 核心原始程式碼找出類似上述「走訪節點」的片段,討論其實作技巧和考量點
4
考慮到以下程式碼:
該如何修改,才能讓 func
得以變更到 main
裡頭 ptrA
的內含值?
延伸問題: 在 GitHub 找出使用 the pointer to the pointer 的 C 語言程式碼,並加以討論
5
以下程式是合法 C99 程式嗎?
請搭配 C 語言規格書解釋
繼續思考以下是否合法:
繼續變形:
也會合法嗎?為什麼?請翻閱 C 語言規格書解說。
6
考慮以下程式碼:
如果要 free() 時,是否需要兩層的迴圈呢?倘若有人只是 free(arr); 會發生什麼事?又,該如何改善?
延伸問題: 藉由 AddressSanitizer 一類的記憶體分析工具,探討上述程式碼在執行時期的行為,並且比較你引入的改善是否有效益
7
推敲以下程式碼的作用:
延伸問題: 在 glibc 原始程式碼找出類似作用和寫法的程式碼,並探討其實作技巧
8
以下程式碼改寫自 Linux 核心原始程式碼,請對照註解 (預期功能),指出實作上的問題,假設輸入 value
不會超過 32-bit。
延伸問題: