2018-2019-1 20165228 《信息安全系統設計基礎》第三周學習總結
阿新 • • 發佈:2018-10-14
系統設計 可能 name c編譯器 header 對齊 and 可選 test
2018-2019-1 20165228 《信息安全系統設計基礎》第三周學習總結
教材學習內容總結
程序的機器級表示:
計算機系統的兩種重要抽象
- ISA(Instruction set architecture):指令集體系結構,機器級程序的格式和行為。定義了處理器狀態指令的格式,以及每條指令對狀態的影響。
機器級程序使用的存儲器地址是虛擬地址,提供的存儲器模型看上去是一個非常大的字節數組。存儲器系統實際表現是將多個硬件存儲器和操作系統軟件組合起來。
匯編代碼及其特點
- 直接面向處理器的程序設計語言。編譯器將C語言代碼轉化為處理器執行的基本指令,匯編語言非常接近於機器代碼。
特點:可讀性相較於機器代碼更好的文本格式表示
X86-64指令
- 指令長度:1到15字節不等
指令格式:OPER [DEST [, SRC]] ;註釋
如何得到C語言代碼的匯編代碼
- 運行GCC編譯器產生一個匯編文件code.s
gcc -Og -S code.c
//-Og表示優化程度,比如-01表示使用第一級優化,優化的級別與編譯時間和最終產生代碼的形式都有關系。
- 使用-c命令選項,GCC編譯並匯編該代碼得到code.o
gcc -c code.c
目標代碼:二進制形式,無法直接查看,機器實際執行的程序只是對一系列指令進行編碼的字節序列。
如何根據目標代碼得到可讀的內容
- 使用反匯編器(disassembler),可根據目標代碼產生一種類似於匯編代碼的格式。
objdump -d code.o
處理器:
- 程序處理器:只是下條將要執行的指令在存儲器中的地址
- 整數寄存器:包含16個命名的位置,分別存儲64位值。可用來記錄某些文件狀態,也可用來保存臨時值。
- 條紋寄存器:保存最近執行的算數或邏輯指令的狀態信息。
浮點寄存器:一組向量寄存器可以存放一個或多個證書或浮點數值。
處理器的通用目的寄存器
X86-64的中央處理單元(cpu)包含一組16個存儲64位值的通用目的寄存器
匯編指令
- mov類指令:源操作數的值復制到目的操作數中。
- movb 傳送字節
- movw 傳送字
- movvl 傳送雙字
- movz 零擴展
- 一元操作
- INC 加一
- DEC 減一
- NEG 取負
- NOT 取補
- 二元操作
- ADD 加
- SUB 減
- IMUL 乘
- XOR 異或
- OR 或
- AND 與
控制
條件碼
```
CF:進位標誌
ZF:零標誌
SF:符號標誌
OF:溢出標誌
```
循環(while, for)
C語言do-while循環:
do
body-statement
while(test-expr);
匯編實現形式:
loop:
body-statement
t = test-expr;
if(t)
goto loop;
尋址方式
- 立即數尋址:操作數在指令中直接給出,只能用於源操作數,數據長度應與目的操作數長度匹配。
- 寄存器尋址:數放在CPU的內部寄存器中,源操作數與目的操作數長度應一致。
存儲器尋址:操作數存放在存儲器中,指令中給出操作數的偏移地址信息。
過程
- 一組指定的參數和一個可選的返回值實現某種功能。
- 形式:函數、方法、子例程、處理函數等。
- 實現過程需要的機器級支持機制
- 傳遞控制
- 傳遞數據
分配和釋放內存
分配和釋放內存
- 棧上的局部存儲
寄存器中的局部存儲空間
棧幀:過程活動記錄,是編譯器用來實現過程/函數調用的一種數據結構。邏輯上講,棧幀就是一個函數執行的黃精:函數參數、函數的局部變量、函數執行完後返回到哪裏等等。
延伸方式:棧是從高地址向低地址延伸。每個函數的每次調用都有自己獨立的一個棧幀,即裏面維持著所需要的各種信息。寄存器ebp指向當前的棧幀的地步(高地址),寄存器esp指向當前的棧幀頂部(低地址)。異質的數據結構
- C語言的struct聲明創建一個數據類型,將可能不同類型的對象聚合到一個對象中。
結構的所有組成部分都存放在一段連續區域內,結構的指針就是結構第一個字節的地址。
數據對齊
對於大多數x86-64指令來說,保持數據對齊能夠提高效率,但是它不會影響程序的行為。
代碼調試中的問題和解決過程
- 問題1:GDB調試問題“No source file named file.c. Make breakpoint pending on future shared library load?”和“沒有符號表被讀取。請使用”file” 命令”
問題1解決方案:在編譯的時候,沒有加-g的選項,導致沒有產生調試符號。
代碼托管
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 124/124 | 1/1 | 9/9 |
2018-2019-1 20165228 《信息安全系統設計基礎》第三周學習總結