第五周(10.05-10.11):
學習計時:共xxx小時 讀書: 代碼: 作業: 部落格: |
一、學習目标 |
1. 了解逆向的概念以及 2. 掌握X86彙編基礎,能夠閱讀(反)彙編代碼 3. 了解ISA(指令集體系結構) 4. 了解函數調用棧幀的概念,并能用GDB進行調試 |
二、學習資源 |
1. 教材:第三章《程式的機器級表示》,詳細學習指導見這:重點是3.7,3.11 2. 課程資料:https://www.shiyanlou.com/courses/413 實驗四,課程邀請碼:W7FQKW4Y 3. 教材中代碼運作、思考一下,讀代碼的學習方法見這。 |
三、學習方法 |
1. 進度很重要:必須跟上每周的進度,閱讀,練習,問答,項目。我會認真對待每一位同學,請你不要因為困難半途而廢。 2. 問答很重要:遇到知識難點請多多提問,這是你的權利更是您對自己負責的義務。問答到部落格園讨論小組:http://group.cnblogs.com/103791/ 3. 實踐很重要:解決書中習題,實踐書中執行個體,完成每周項目,才算真的消化了這本好書。通過實驗樓環境或自己安裝的虛拟機在實踐中進行學習 4. 實驗報告很重要:詳細記錄你完成項目任務的思路,獲得老師點評和幫助自己複習。學習完成後在部落格園中(http://www.cnblogs.com/)把學習過程通過部落格發表,部落格标題“學号-資訊安全系統設計基礎第五周學習總結” |
四、學習任務 |
1. 閱讀教材,完成課後練習(書中有參考答案) 3.1-3.7中練習,重點:3.1,3.3,3.5,3.6,3.9,3.14,3.15,3.16,3.22,3.23,3.27,3.29,3.30,3.33,3.34 2. 考核:練習題把資料變換一下 3. 實驗:需要動手的到實驗樓中練習一下 4. 深化、實踐題目,額外加分 |
五、後續學習預告(可選): |
第四章《處理器體系結構》 |
六、學習過程 |
ISA 定義了處理器處理狀态、指令的格式,以及每條指令對狀态的影響。 在指令行使用-S 選項,就能得到C語言編譯器産生的彙編代碼 64位的機器産生32位的代碼:gcc -m32 -S xxx.c 二進制檔案檢視内容 使用反彙編器 unix> objdump -d code.o 指針使用示例: 參數xp是一個指向整數的指針,而y是一個整數。像x這樣的局部變量,通常是儲存在寄存器中。 語句 int x =*xp;(指針的間接引用,将xp的值存放到名為x的局部變量) 語句 *xp = y;(将參數y的值寫到xp所指的位置,标明的是一個寫操作) CMP指令根據它們的兩個操作數之差來設定條件碼; 除了隻設定條件碼而不更新目标寄存器之外,CMP指令與SUB指令的行為是一樣的。 為單個過程配置設定的那部分棧稱為棧幀。最頂端的棧幀以兩個指針界定,寄存器%ebp為幀指針,而寄存器%esp為棧指針。 當程式進行時,棧指針可以移動,是以大多數資訊的通路都是相對于幀指針的。 假設過程p(調用者)調用過程q(被調用者),則q的參數放在p的棧幀中。當p調用q時,p中的傳回位址被壓入棧中,形成p的棧幀的末尾。傳回位址就是程式從q傳回時應該繼續執行的地方。q的棧幀從儲存的幀指針的值開始,後面儲存其他寄存器的值。 根據慣例,寄存器%eax \%edx\%ecx被劃分為調用者儲存寄存器。%ebx\%esi\%edi被劃分為被調用者儲存寄存器。 |
七、遇到的問題及解決 |
1.對增加棧指針來釋放空間不了解。“可以利用push1将資料存入棧中并利用pop1指令從棧中取出。将棧指針的值減少适當地值可以配置設定沒有指定初始值的資料的空間”,對書上這個解釋不了解。 2.按照作業編譯的沒有結果。 ![]() |
八、其他 |
(提示:此處由學生填寫,靈感,領悟等) |