C08: sandbox
主講人: jserv / 課程討論區: 2017 年系統軟體課程
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
返回「進階電腦系統理論與實作」課程進度表
預期目標
隔離執行環境的建構
- Trusted Execution Environment (TEE) 的應用為何?(舉出共筆以外的真實世界案例)
- 是否已詳細閱讀 Moxie 處理器架構的 Architecture 文件?能否用 Moxie 組合語言寫出迴圈版本的 Fibonacci 數列程式?
- binutils, gcc, glibc, qemu 到 libffi 這些專案的作用為何?
- Intel 的 Software Guard Extensions 關鍵特性為何?並舉出共筆以外的應用案例
- moxiebox 打造出隔離執行 (sandbox) 的運作環境該如何與外界溝通?列出對應的程式碼並解讀
- 是否已詳閱文件 sandbox execution environment 呢?解釋 法國的加密貨幣硬體錢包公司 Ledger 的 BOLOS 運作原理
- 何謂 cross compiler 呢?我們為何需要?
- ELF 執行檔格式包含哪些 section 呢?又在哪裡可見到詳細描述?
- 是否已掌握 GNU gprof 的使用?運作原理為何?
- 是否已操作 remote GDB 呢?如何在執行時期檢驗載入的 ELF 執行檔裡頭
.text
和 .data
section 內容呢?
- 是否詳讀文件 遠端除錯 並記錄心得呢?是否在 GNU/Linux 實際照著操作?又,遇到什麼問題呢?
- 提示: 硬體架構以不同,文章提及 IA32,但現在已是 x86_64 架構
- GDB 命令如
step
是如何透過 GDB stub 傳遞到 moxiebox 裡頭呢?兩邊的通訊協定又為何?
- 是否理解 GDB Macro 和 Command Files 呢?能否透過 moxiebox 進行練習呢?
Model Checking
- cbmc 的作用為何?在什麼領域會需要呢?
- 能否簡介自動機理論 (automata theory) 呢?
- model checking 中局部狀態表示每個主題執行通訊協定的過程,而所有局部狀態構成全域狀態,每個局部狀態的改變由主體的訊息接收、發送來觸發,能否舉出實際案例說明?
- 是否已編譯 cbmc 並用來分析 C 程式呢?若是,舉出詳細的操作和你的解讀
- 以 moxiebox 為例,能否使用 cbmc 來找出程式碼實作的缺陷 (或者自己創造) 呢?
- 在 GitHub 專案中找出使用 model checking 的案例,並且具體說明其作用 (當然要親自實驗)
第 6 週作業回顧
- 是否已知曉搭配 computed goto 實作更高效的 opcode dispatch 呢?舉例說明並且附上效能分析
- 運用 threaded code 的技巧,並以對應的 direct threading 解釋
- 何謂 tail recursion 呢?舉出具體而微的案例並用 perf 解釋細部差異 (特別是 cycle count 的落差)
- 是否理解 Fibonacci 數列求值的多種實作方式?若是,詳述之
- GCC 如何從 3-address code 轉換,又如何轉換出給定 ISA 的組合語言程式?
- 目前採用的 LP64 資料模型下,int 實質為 32-bit,而 尚在 32-bit 能表示的數值範圍內,但 該如何處理?
- Fibonacci sequence 在真實世界中究竟有何應用?
- Fibonacci Q-Matrix 如何運作?
- 如何設計 CPU profiler 呢?
- 如果我們也想對 full-stack-hello 提出 GDB 支援,該如何實作 GDB stub 呢?
作業要求
無論完成度多高,都該在指定的共筆頁面持續有進度,並且要提供解說的錄影 (上傳到 YouTube,設定「公開」權限,好東西就要分享給大家),在 11 月 24 日 07:00AM 前完成,以便接受教師和其他同學的檢視。
- 在 GitHub 上 fork moxiebox,並設定協作者的寫入權限
- 編輯 2017 年秋季班第一次分組表,新增兩個共筆頁面: (請依循給定格式,注意空白)
自我檢查事項(sandbox)
: 答覆上述各節的「自我檢查事項」,務必詳盡回覆,誠實面對自己TM
開發紀錄(sandbox) / GitHub / YouTube
: 針對下方作業要求,詳實記錄開發進度和討論,不要變成「兩個和尚沒水喝」
- 在 moxiebox 的
tests
目錄中,比照 simulator 作業要求,依序實作以下 Fibonacci 數列求值方法: (可用 C 程式實作,但需要附上詳盡的效能分析,善用 GNU gprof 和 GDB)
- recursive
- iterative
- Tail recursion
- Q-Matrix
- Fast doubling (加上 clz 加速)
- 善用 GNU plot 製圖和解讀
- 注意 之後的數值會超過 232 可表達的範圍,需要設計有效的數值表示機制來處理 (如用兩個 32-bit 暫存器保存 264 數值)
- 運用 GDB script/commands 來實作自動化測試和效能分析
- 注意: moxiebox 沒有
printf
可用,需要思考如何透過 mmap
來比對程式輸出和預期結果,自動化非常重要!
- 額外在 moxiebox 移植 (或者重新實作) 以下程式碼,並且充分驗證 (至少做一項)
- ctaes: constant-time AES implementation
- constant-time-sorts: constant-execution-time versions of popular sorting algorithms
- cst_time_memcmp: onstant time memcmp() function
- constant_time_compare: constant time comparison written in C for Python 2.7
- CN_String: Stores length for constant time strlen
- 承上,詳述原始程式的演算法和應用場合,並探討在 moxiebox 移植的工作