2017-2018-1 20155234《信息安全系統設計基礎》第五週學習總結

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

程序的機器級表示

3.2程序編碼

gcc是Linux上默認的編譯器 。gcc -0g告訴編譯器使用第一級優化。優化等級越高,程序運行的越快,編譯時間越長,用調試工具調試程序越困難。高級別的的優化產生的代碼會嚴重改變形式。
gcc將源代碼轉換爲可執行代碼。首先,C預處理器擴展源代碼,插入全部用#include命令指定的文件,並擴展全部用#define聲明指定的宏。
彙編器將彙編代碼轉換成二進制目標代碼,目標代碼是機器代碼的一種形式,包含全部指令的二進制表示,但沒有填入地址的全局值。
鏈接器將目標文件與實現庫函數的代碼合併,併產生最終的可執行代碼文件。可執行代碼是處理器執行的代碼格式。html

3.2.2 代碼示例

gcc -01 -s code.c //使用「-s」 就能獲得C語言編譯器產生的彙編代碼 。這會產生一個彙編文件 code.s
gcc -01 -c code.c //使用「-c」gcc會編譯並彙編該代碼,產生目標代碼文件code.o,他是二進制格式,沒法直接查看。
反彙編器能夠查看目標文件內容:objdump -d code.o
「gcc -01 -o prog code.o main.c」 經過以前講的,應該是讓編譯器將目標文件「code.o」與實際函數庫 「main.c」合併 生成可執行文件progjava

3.2.3 關於格式的註解

3.3 數據格式

單精度:4字節 雙精度:8字節 擴展精度:10字節實際存儲成12字節
moveb、movw、movl:對應字節、字、雙字。git

3.5 算術和邏輯操做

加載有效地址
一元操做
二元操做
移位操做安全

3.5.1 加載有效地址

加油有效地址「leal」-將有效地址寫到目的操做數,目的操做數必須是一個寄存器。函數

3.5.2 一元操做和二元操做

一元操做,它只有一個操做數,既是原操做數又是目的操做數,操做數能夠是一個寄存器,也能夠是一個存儲器位置。
二元操做,有兩個操做數,第一個爲原操做數,能夠是當即數、寄存器或存儲器位置;第二個爲目的操做數,能夠是寄存器或者是存儲器位置。
二元操做,有兩個操做數,第一個爲原操做數,能夠是當即數、寄存器或存儲器位置;第二個爲目的操做數,能夠是寄存器或者是存儲器位置。工具

3.5.3 移位操做

移位操做,先給出位移量,第二項給出要移位的數值。
由於32爲計算機,因此覺得最多移位31爲(排除循環移位),因此只容許0到31位的位移。
位移量能夠是個當即數,或者是隻容許%cl。
SAL和AHL沒有區別。
SAR爲算數右移,最高位要和符號標誌位配合進行算數右移。
SHR爲邏輯右移。
移位操做的目的操做數能夠是一個寄存器或者是一個存儲器的位置。學習

3.5.5 特殊的算術操做

雙操做數乘法(imull)指令,從兩個32位的操做數產生一個32位的乘積。
單操做數乘法指令mull和imull,這兩條指令都要求一個參數必須在寄存器%eax中,另外一個由原操做數給出,高32爲存放在%edx中,低32爲存放在%eax中。優化

3.6.1 條件碼

CF:進位標誌
ZF:零標誌
SF:符號標誌
OF:溢出標誌位
leal指令不改變任何條件,用它進行地址計算。
對於移位操做,進位標誌將設置爲最後一個移除的位,而溢出標誌設置爲0.
CMP指令根據他們的兩個操做數之差來設置條件碼,CMP與SUB指令的行爲是一致的。
TEST指令與AND指令的行爲是一致的。編碼

3.6.2 訪問條件碼

SET指令的目的操做數是8個單字節寄存器元素之一,或者是一個字節的存儲器位置,將這個字節設置成0或者1。
movzbl指令用來清零%eax的三個高字節。.net

3.6.3 跳轉指令及其編碼

jmp指令是無條件跳轉,它能夠是直接跳轉,即跳轉目標是做爲指令的一部分編碼的;也能夠是間接跳轉,即跳轉目標是從寄存器或存儲器位置中讀出的。
程序計數器的值是跳轉指令後面的那條指令的地址,而不是跳轉指令自己的地址。

3.7.1 棧幀結構

爲單個過程分配的那部分稱爲棧幀。
%esp:棧指針
%ebp:幀指針
棧指針能夠移動,所以大多數信息的訪問是經過棧指針的
3.7.2棧幀結構
call指令有一個目標,即指明被調用過程起始的指令地址,直接調用是一個標號,間接調用是「*」後面跟一個操做指示符。
call指令的效果是將返回地址入棧,並跳轉到被調用過程的起始位置。
ret指令從棧中彈出地址,並跳轉到這個位置。
%exa用來返回值
leave爲返回值作好準備

代碼託管

結對搭檔

201555226

感想

由於我上學期彙編學的不夠好致使理解困難。特別是看棧幀及遞歸調用這部分,雖然看了不少,可是仍是不能很好地去理解運用。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積)
目標 5000行 30篇
第一週 6/6 1/1
第三週 150/156 2/3
第四周 77/233 1/4

參考資料

相關文章
相關標籤/搜索