2017-2018-1 20155234《信息安全系统设计基础》第五周学习总结
20155234第一周《信息安全系統設計基礎》學習總結
程序的機器級表示
3.2程序編碼
gcc是Linux上默認的編譯器 。gcc -0g告訴編譯器使用第一級優化。優化等級越高,程序運行的越快,編譯時間越長,用調試工具調試程序越困難。高級別的的優化產生的代碼會嚴重改變形式。
gcc將源代碼轉換為可執行代碼。首先,C預處理器擴展源代碼,插入所有用#include命令指定的文件,并擴展所有用#define聲明指定的宏。
匯編器將匯編代碼轉換成二進制目標代碼,目標代碼是機器代碼的一種形式,包含所有指令的二進制表示,但沒有填入地址的全局值。
連接器將目標文件與實現庫函數的代碼合并,并產生最終的可執行代碼文件。可執行代碼是處理器執行的代碼格式。
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”合并 生成可執行文件prog
3.2.3 關于格式的注解
3.3 數據格式
單精度:4字節 雙精度:8字節 擴展精度:10字節實際存儲成12字節
moveb、movw、movl:對應字節、字、雙字。
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的三個高字節。
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 |
參考資料
- 《深入理解計算機系統V3》學習指導
轉載于:https://www.cnblogs.com/zxm20/p/7709436.html
總結
以上是生活随笔為你收集整理的2017-2018-1 20155234《信息安全系统设计基础》第五周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【例题 6-6 UVA - 679】Dr
- 下一篇: modelsim仿真正确FPGA运行不正