20135210程涵——信息安全系統設計基礎第五週學習總結

 

第五週(10.05-10.11):

學習計時:共14小時html

讀書:3編程

代碼:3windows

做業:2數組

博客:4安全

1、學習目標數據結構

1. 理解逆向的概念以及
2. 掌握X86彙編基礎,可以閱讀(反)彙編代碼
3. 瞭解ISA(指令集體系結構)
4. 理解函數調用棧幀的概念,並能用GDB進行調試

2、學習資源less

1. 教材:第三章《程序的機器級表示》,詳細學習指導見:重點是3.7,3.11函數

2. 課程資料:https://www.shiyanlou.com/courses/413   實驗四,課程邀請碼:W7FQKW4Y學習

3. 教材中代碼運行、思考一下,讀代碼的學習方法見測試

3、學習方法

1.  進度很重要:必須跟上每週的進度,閱讀,練習,問答,項目。我會認真對待每一位同窗,請你不要由於困難半途而廢。

2. 問答很重要:遇到知識難點請多多提問,這是你的權利更是您對本身負責的義務。問答到博客園討論小組: http://group.cnblogs.com/103791/
3. 實踐很重要:解決書中習題,實踐書中實例,完成每週項目,纔算真的消化了這本好書。經過實驗樓環境或本身安裝的虛擬機在實踐中進行學習
4. 實驗報告很重要:詳細記錄你完成項目任務的思路,得到老師點評和幫助本身複習。學習完成後在博客園中( http://www.cnblogs.com/)把學習過程經過博客發表,博客標題「學號-信息安全系統設計基礎第五週學習總結」

 

4、學習任務

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. 深化、實踐題目,額外加分

 

、後續學習預告(可選):

第四章《處理器體系結構》

、學習過程

(提示:此處由學生填寫,學習過程,學習筆記,代碼編譯,運行結果,思考等)

 


 

 

 3.2程序編碼

 

1、機器級代碼

 

對於機器級編程來講,兩種抽象尤其重要。

 

  • 指令集體系結構ISA
  • 存儲器系統

 

  1. ISA:機器級程序的格式和行爲,定義爲指令集體系機構,它定義了處理器狀態指令的格式,以及每條指令對狀態的影響。機器級程序使用的存儲器地址是虛擬地址,提供的存儲器模型看上去是一個很是大的字符數組
  1. PC:程序計數器。在IA32中,用%eip表示,指示將要執行的下一條指令在存儲器中的地址。
  2. 程序存儲器:包含程序的可執行機器代碼,操做系統須要的一些信息,用來管理過程調用和返回的運行時棧,以及用戶分配的存儲器塊。

 

2、代碼示例

 

書第107頁的代碼以下:

int accum = 0;

int sum(int x, int y)
{
    int t = x + y;
    accum += t;
    return t;
}

 

反彙編器查看目標代碼文件的內容。

objdump -d xxx.xx

  

 

二進制文件能夠用od 命令查看,也能夠用gdb的x命令查看。 有些輸出內容過多,咱們可使用 more或less命令結合管道查看,也可使用輸出重定向來查看。

od code.o | more
od code.o > code.txt

 

在讀取地址時要注意是否是小端法,小端法的正確讀法是與天然方向相反,好比109頁第六行中後四個字節18 a0 04 08的正確順序實際上是08 04 a0 18,去掉最高位的0後即爲0x804a018

 

3、關於格式的註解

 

全部以「.」開頭的行都是指導彙編器和連接器的命令。咱們一般能夠忽略這行。

爲了更清楚地說明彙編代碼,有一種格式來表示彙編代碼。 忽略了大部分指令,但包括行號和解釋性說明。

如下是帶解釋的彙編代碼:

 

Linux和windows的彙編格式的區別:

  • Intel代碼省略了指示大小的後綴,即'l'
  • Intel代碼省略了寄存器名字前面的‘%’符號,用的是esp,而不是%esp
  • Intel代碼用不一樣的方式來描述存儲器中位置

在帶有多個操做數的指令狀況下,列出操做數的順序相反

當帶選項-S-O1運行gcc時,會產生xxx.s文件,其中帶有'.'開頭的行是指導彙編器和連接器的命令

 

 

3.3 數據格式

C語言數據類型在IA32中的大小:

 

大多數經常使用數據類型都是以雙字形式存儲的。

 

如圖,大多數GCC生成的彙編代碼指令都有一個字符後綴,代表操做數的大小。

浮點數使用的是一組徹底不一樣的指令和寄存器。

 

3.4 訪問信息

 

1、操做數指示符

  1. 操做數格式

操做數的三種類型:

  1. 當即數(常數值
  2. 寄存器(某個寄存器的內容
  3. 存儲器(根據計算出來的地址訪問某個存儲器位置

 

有效地址的計算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

 

尋址方式和操做數格式:

 

 

2、數據傳送指令

將數據從一個位置複製到另外一個位置的指令。

 

 

不能從內存地址直接MOV到另外一個內存地址,要用寄存器中轉一下,所以須要兩個指令。

  • 棧頂元素的地址是全部棧中元素地址中最低的
  • 棧指針%esp保存棧頂元素的地址。

 

 

3.5 算術和邏輯操做

 

按目的操做數分類:

 

1.加載有效地址

實際是將有效地址寫入目的操做數,目的操做數必須是寄存器。

  • 指令形式:從存儲器讀取數據到寄存器。
  • 實際:將有效地址寫入到目的操做數,而目的操做數必須是寄存器;並不真實引用存儲器。

 

2.一元操做

操做數既是源又是目的。能夠是寄存器也能夠是存儲器。

 

3.二元操做

第二個操做數既是源又是目的。但兩個操做數不能同時是存儲器。

 

4.移位操做

位移量是一個當即數或放在單字節寄存器%cl中。移位操做的目的操做數能夠是一個寄存器或是一個存儲器位置。

 

SAL 算術左移

SHL 邏輯左移

SAR 算術右移(補符號位)

SHR 邏輯右移(補0

 

控制中最核心的是跳轉語句

有條件跳轉(實現if,switch,while,for)

無條件跳轉jmp(實現goto)

 

 特殊的算術操做

 

3.6 控制

 

1、條件碼寄存器

  • 描述了最近的算術或邏輯操做的屬性,能夠檢測這些寄存器來執行條件分支指令
  • 經常使用條件碼:CF ZF SF OF

leal不改變任何條件碼CMP指令根據他們的兩個操做數之差來設置條件碼。除了至設置條件碼而不更新目標寄存器以外。CMP與SUB相同)

 

2、訪問條件碼

1.根據條件碼的某個組合,將一個字節設置爲0或1。SET指令根據t=a-b的結果設置條件碼

2.能夠條件跳轉到程序的某個其餘部分

3.能夠有條件的傳送數據

 

3、跳轉指令(致使執行切換到程序中一個全新的位置,跳轉的目的地一般用一個標號指明)

無條件跳轉:JMP 能夠是直接跳轉也能夠是間接跳轉(寫法是*後面加操做數指示符)

有條件跳轉:根據條件碼的某個組合,或者跳轉或者繼續執行下一條指令

  1. 條件分支——if-else結構:在兩個分支語句中選擇執行一個,彙編實現經過goto,就是彙編器爲兩個分支產生各自的代碼塊,它會插入條件和無條件分支,以保證能執行正確的代碼塊。
  2. 循環結構——do-while、while、for:用條件測試和跳轉組合實現循環的效果。大多數彙編器根據do-while形式來產生循環代碼,其餘的循環會首先轉換成do-while形式,而後再編譯成機器代碼。
  3. switch語句:根據一個整數索引值進行多重分支。經過使用跳轉表這種數據結構實現更加高效。跳轉表是一個數組,表項i是一個代碼段的地址,這個代碼段實現當開關索引值爲i時程序該作的。此時跳轉能夠用goto/jmp

 

 

 

3.7 過程

包括將數據和控制從代碼的一部分傳遞到另外一部分,須要在進入時爲過程的局部變量分配空間並在退出時釋放空間,這經過程序棧實現。

IA32經過程序棧來實現過程調用。

 

棧的做用:傳遞過程參數、存儲返回信息、保存寄存器、本地存儲

棧幀:爲單個過程分配的那部分棧

結構:最頂端的棧幀以兩個指針界定,寄存器%ebp爲幀指針,寄存器%esp爲棧指針。程序執行時,棧指針能夠移動,大多數信息的訪問都是相對於幀指針的。

 

 

棧向低地址方向增加

 

 

2、轉移控制

  1. call指令

有一個目標,即指明被調用過程起始的指令地址,效果是將返回地址入棧,並跳轉到被調用過程的起始處。

  1. ret指令

從棧中彈出地址,並跳轉到這個位置,使用這個指令棧指針要指向call指令存儲返回地址的位置。

 

 

 

7、遇到的問題及解決

(提示:此處由學生填寫,是重要的得分點,要寫出遇到的問題和解決方案以及對出現問題的思考)

 不能由於困難而半途而廢呀……上週的學習出現了問題,所以測驗成績很低。學習的內容一旦多了,就會想要得過且過。

通過測驗,從新反思了本身的學習習慣問題。之後會繼續腳踏實地。

不過老師此次的書本閱讀量好大,寫博客就寫了四個小時……前六節的基礎很重要所以不能不看,第七節最重要,所以重點理解。

課後習題由於有參考答案因此並無大問題,有在學習過程當中遇到一些瑣碎的問題,詢問了同窗和百度知道,都有不一樣程度地解決。

 

最後,仍是但願老師能夠減輕做業量……今天個人生日也全埋在教室裏寫做業了……

 

PS 閆佳鑫同窗很強大,有少量內容借鑑她的博客。

 

 

8、其餘

(提示:此處由學生填寫,靈感,領悟等)

相關文章
相關標籤/搜索