標籤:實現 運行 .com 符號表 命令選項 sem des 過程 調試
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
objdump -d code.o
處理器:
條件碼
``` 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 《資訊安全系統設計基礎》第三周學習總結