C08: sandbox

tags: sysprog2017

主講人: 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) 的運作環境該如何與外界溝通?列出對應的程式碼並解讀
    • 提示: mmap 系統呼叫
  • 是否已詳閱文件 sandbox execution environment 呢?解釋 法國的加密貨幣硬體錢包公司 Ledger 的 BOLOS 運作原理
  • 何謂 cross compiler 呢?我們為何需要?
  • ELF 執行檔格式包含哪些 section 呢?又在哪裡可見到詳細描述?
  • 是否已掌握 GNU gprof 的使用?運作原理為何?
    • 提示: 參閱 raytracing 作業規範和共筆成果
  • 是否已操作 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,而
    fib(46)
    尚在 32-bit 能表示的數值範圍內,但
    fib(47)
    該如何處理?
  • 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: 針對下方作業要求,詳實記錄開發進度和討論,不要變成「兩個和尚沒水喝」
  • moxieboxtests 目錄中,比照 simulator 作業要求,依序實作以下 Fibonacci 數列求值方法: (可用 C 程式實作,但需要附上詳盡的效能分析,善用 GNU gprof 和 GDB)
    • recursive
    • iterative
    • Tail recursion
    • Q-Matrix
    • Fast doubling (加上 clz 加速)
  • 善用 GNU plot 製圖和解讀
  • 注意
    Fib(46)
    之後的數值會超過 232 可表達的範圍,需要設計有效的數值表示機制來處理 (如用兩個 32-bit 暫存器保存 264 數值)
  • 運用 GDB script/commands 來實作自動化測試和效能分析
    • 注意: moxiebox 沒有 printf 可用,需要思考如何透過 mmap 來比對程式輸出和預期結果,自動化非常重要!
  • 額外在 moxiebox 移植 (或者重新實作) 以下程式碼,並且充分驗證 (至少做一項)
    1. ctaes: constant-time AES implementation
    2. constant-time-sorts: constant-execution-time versions of popular sorting algorithms
    3. cst_time_memcmp: onstant time memcmp() function
    4. constant_time_compare: constant time comparison written in C for Python 2.7
    5. CN_String: Stores length for constant time strlen
  • 承上,詳述原始程式的演算法和應用場合,並探討在 moxiebox 移植的工作