20145324 《信息安全系統設計基礎》第五週學習總結

20145324 《信息安全系統設計基礎》第五週學習總結

教材學習內容總結

三代X86 尋址方式:

DOS時代的平坦模式,不區分用戶空間和內核空間,很不安全。
8060的分段模式
IA32的帶保護模式的平坦模式html

機器級編程的兩種抽象

①指令集結構ISA是機器級程序的格式和行爲,定義了處理器狀態、指令的格式,以及每條指令對狀態的影響git

②機器級程序使用的存儲器地址是虛擬地址,提供的儲存器看上去是一個很是大的字節數組,其實是將多個硬件存儲器和操做系統軟件組合起來編程

代碼編譯

編譯產生彙編代碼:gcc –s xxx.c 獲得.s文件
編譯產生目標代碼文件:gcc -o1 xxx.c 獲得.o文件
反彙編命令:objdump –d xxx
直接編譯64位處理器獲得32代碼的命令:gcc –S –o xxx.s xxx.c -m32數組

數據格式

幾個寄存器

三種操做數:

當即數:常數值,表示爲$c標準表示的整數
寄存器:表示某個寄存器的內容
存儲器:根據計算出來的地址訪問某個存儲器位置安全

操做數表格

數據傳送指令

棧的特色

1.後進先出的原則
2.push壓棧,pop出棧
3.棧頂:老是從這端插入和刪除元素
4.棧頂元素的地址是最低的
5.棧指針%esp保存着棧頂元素的地址函數

指針就是地址;局部變量保存在寄存器中

算術和邏輯操做

四組操做

①加載有效地址:將有效地址寫入目的操做數,目的操做數必須是寄存器
②一元操做:只有一個操做數,既是源又是目的
③二元操做:源操做數是第一個,能夠是當即數、寄存器、存儲器,目的操做數是第二個,能夠是寄存器、存儲器,但兩個不能同時爲存儲器
④移位:第一個是移位量,用單個字節編碼且只容許0-31位的移位,能夠是當即數或者放在單字節寄存器%cl中(算術右移SAR,填上符號位/邏輯右移SHR,填上0)目的操做數能夠是一個寄存器或存儲器學習

特殊算術操做

條件碼:

CF:進位標誌
ZF:零標誌
SF:符號標誌
OF:溢出標誌測試

條件碼訪問經常使用的三種方法:

①根據條件碼的某個組合,將一個字節設置爲0或1
②能夠條件跳轉到程序的某個其餘部分
③能夠有條件的傳送數據編碼

比較和測試指令

SET指令

SET指令根據t=a-b的結果設置條件碼操作系統

jump指令

直接跳轉:後面跟標號做爲跳轉目標
間接跳轉:*後面跟一個操做數指示符

•if-else
•do-while
•while
•for
•swith

條件傳送指令

利用控制的條件轉移,當條件知足時就,程序沿着一條執行路徑進行,而當條件不知足時,就走另外一路徑。
數據的條件轉移方式

call指令

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

ret指令

ret指從棧中彈出地址,並跳轉到這個位置
ret指令返回到call指令後的那條指令

用棧來傳遞過程參數、存儲返回信息、保存寄存器用於之後恢復,以及本地存儲。爲單個過程分配的那部分棧稱爲棧幀。
最頂端的棧幀以兩個指針界定,寄存器%ebp爲幀指針,寄存器%esp爲棧指針

寄存器的使用慣例:

%eax,%edx,%ecx 調用者保存寄存器
%ebx,%esi,%edi 被調用者保存寄存器
%ebp,%esp 保持寄存器

gdb

使用流程

1)進入GDB  #gdb test

  test是要調試的程序,由gcc test.c -g -o test生成。進入後提示符變爲(gdb) 。

2)查看源碼  (gdb) l

  源碼會進行行號提示。

  若是須要查看在其餘文件中定義的函數,在l後加上函數名便可定位到這個函數的定義及查看附近的其餘源碼。或者:使用斷點或單步運行,到某個函數處使用s進入這個函數。

3)設置斷點  (gdb) b 6

  這樣會在運行到源碼第6行時中止,能夠查看變量的值、堆棧狀況等;這個行號是gdb的行號。

4)查看斷點處狀況  (gdb) info b

  能夠鍵入"info b"來查看斷點處狀況,能夠設置多個斷點;

5)運行代碼  (gdb) r

6)顯示變量值  (gdb) p n

  在程序暫停時,鍵入"p 變量名"(print)便可;

  GDB在顯示變量值時都會在對應值以前加上"$N"標記,它是當前變量值的引用標記,之後若想再次引用此變量,就能夠直接寫做"$N",而無需寫冗長的變量名;

7)觀察變量  (gdb) watch n

在某一循環處,每每但願可以觀察一個變量的變化狀況,這時就能夠鍵入命令"watch"來觀察變量的變化狀況,GDB在"n"設置了觀察點;

8)單步運行  (gdb) n

9)程序繼續運行  (gdb) c

  使程序繼續往下運行,直到再次遇到斷點或程序結束;

10)退出GDB  (gdb) q

代碼調試中的問題和解決過程

•實驗樓實驗

編寫代碼

編譯文件生成彙編代碼

第一小問

第二小問

問題

根據書上的步驟輸入gdb prog出現這種狀況,輸入bt/frame/up/down顯示NO STACK

按下圖方法便可

代碼託管問題(已在答疑論壇發佈)

之前輸入git pull --rebase origin master後就能夠成功上傳,但此次出現了新的狀況

解決方法,多是git pull -rebase用的太多了,不用新建文件夾,直接保存在上週代碼的那個文件夾上傳就能夠了

本週代碼託管截圖

學習進度條

博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 30篇 400小時
第零周 1/1 20/20
第一週 1/2 20/40
第二週 1/3 20/60
第三週 1/4 20/80
第四周 0/4 00/80
第五週 1/5 20/100
相關文章
相關標籤/搜索