資訊安全系統設計基礎第四周學習總結

來源:互聯網
上載者:User

標籤:

第三章,程式的機器級表示

電腦執行機器代碼。在本章中,我們會近距離地觀察機器代碼,以及人類可讀的表示——彙編代碼。

Intel處理器系列俗稱x86。8086、80286、i386、i486、Pentium、PentiumPro、PentiumⅡ、PentiumⅢ、Pentium4、Pentium4E、Core2、Core i7。

摩爾定律:晶體管數量每26個月就會翻一番。

Linux使用平坦式定址方式,使程式員將整個儲存空間看做一個大的位元組數組。

3.2程式編碼

3.21機器及代碼

兩個抽象:①機器級程式的格式和行為,定義為指令集體繫結構(ISA),它定義了處理器狀態、指令格式、以及每條指令對狀態的影響。

       ②機器級程式使用的儲存空間地址是虛擬位址,提供的儲存空間模型看上去是一個非常大的位元組數組。

3.22程式碼範例

假設寫一個C語言代碼檔案code.c,在命令列上使用“-s”選項,就能得到C語言編譯器產生的彙編代碼,會使gcc運行編譯器,產生一個彙編檔案code.s,但是不做進一步工作。

3.3資料格式

char      位元組  b  1

short      字   w  2

int        雙字   l   4

long int      雙字  l    4

long long int  —   —  4

char *      雙字  l   4

float     單精確度  s  4

double    雙精確度  l   8

long double 擴充精度  t  10/12

3.4訪問資訊 

一個IA32中央處理器單元包括一組8個儲存32位的寄存器。這些寄存器用來儲存整數資料和指標。

3.41運算元指示符

大多數指令有一個或多個運算元,指示出一個操作中要引用的來源資料值,以及放置結果的目標位置。

三種類型:①立即數,也就是常數值。

       ②寄存器,它表示某個寄存器的內容。

       ③儲存空間引用,它會根據有效地址訪問某個儲存空間的位置

有多種不同的定址模式

這種引用的四個組成部分:①立即數位移Imm

            ②基底位址暫存器Eb

            ③變址寄存器Ei

            ④比例因素s(這裡s必須是1、2、4、8)

3.42資料傳送指令

MOV、MOVS、MOVZ

MOV

MOV reg/mem, imm      ;立即數?寄存器或儲存空間
MOV reg/mem/seg, reg ;寄存器的值?寄存器/記憶體/段寄存器
MOV reg/seg, mem       ;記憶體單元的值?寄存器/段寄存器
MOV reg/mem, seg      ;段寄存器的值?寄存器/記憶體單元
IA32的限制:兩個運算元都不能指向儲存空間。

MOVZ中pushl將雙字壓棧和popl將雙字出棧。

棧是一個資料結構,可以添加或者刪除值,需要遵循“後進先出”的規則。通過操作把資料壓進棧中,通過pop操作刪除資料。

總是從一端插入或刪除元素,這一端稱為棧頂。

*將一個雙字值壓入棧中,首先要將棧指標減4,然後將值寫到新的棧頂地址。

3.6控制

3.61條件碼

CF:進位標誌

ZF:零標誌

SF:符號標誌

OF:溢出標誌

資料傳送指令
MOV 不影響標誌位
PUSH POP 不影響標誌位
XCHG 交換指令 不影響標誌位
XLAT 換碼指令 不影響標誌位
LEA 有效地址送寄存器指令 不影響標誌位
PUSHF 標誌進棧指令 不影響標誌位
POPF 標誌出棧指令 標誌位由裝入值決定

3.62訪問條件碼

setl:小於時設定

setb:低於時設定

movzbl:清零%eax的三個高位位元組

3.7 過程1.棧幀

為單個過程分配的那部分棧稱為棧幀,通用結構見149頁

所以本質上棧幀還是棧。

2.兩個指標

最頂端的棧幀以兩個指標界定:

寄存器%ebp-幀指標寄存器%esp-棧指標

棧指標可移動,所以資訊訪問多相對於幀指標。

3.調用的過程

課本150頁過程P調用過程Q的樣本。

調用者的幀應該在被調用者的下面,並且調用者返回地址是它的棧幀末尾,這樣可以保證被調用者執行完畢全都出棧後,程式能夠繼續向下執行。

關於被調用者Q用棧的幾個用處:

1.儲存不能存放在寄存器中的局部變數。

當要對一個局部變數使用地址操作符&的時候,就必須要為它產生一個地址,所以要入棧。這個用法!以前沒見過!

2.存放它調用的其他過程的參數。

Q會用棧幀來存放它調用的其他過程的參數。第一個參數放在相對於%ebp位移量為8的位置處。剩下的參數儲存在後續的4位元組塊中,所以參數i就在相對於%ebp的位移量為4+4i的地方。 call指令有一個目標,即指明被調用過程起始的指令地址。(可以直接也可以間接)call指令效果是將返回地址入棧,並跳轉到被調用過程的起始處。ret命令從棧中彈出地址,並跳轉到這個位置。正確的使用這條命令,要使棧做好準備,棧指標要指向前面call指令儲存返回地址的位置。寄存器%eax可以用來傳回值。 程式寄存器是唯一能被所有過程共用的資源。根據慣例,寄存器%eax,%edx,和%ecx被劃分為調用者儲存寄存器,寄存器%edx,%esi,和%edi被劃分為被調用者儲存寄存器。 GCC堅持一個X86編程指導方針,也就是一個函數使用的所有棧空間必須是16字的整數倍。採用這個原則是為了保證訪問資料的嚴格對齊。、棧規則提供了一種機制,每次函數調用都有它自己私人的狀態資訊(儲存的返回位置,棧指標和被調用者儲存寄存器的值)儲存。有需要的話還可以提供局部變數的儲存。  參考資料---閆佳歆,萬子惠 

資訊安全系統設計基礎第四周學習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.