2018-2019-1 20165228 《資訊安全系統設計基礎》第三周學習總結

來源:互聯網
上載者:User

標籤:實現   運行   .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
  • 目標代碼:二進位形式,無法直接查看,機器實際執行的程式只是對一系列指令進行編碼的位元組序列。

    如何根據目標代碼得到可讀的內容
  • 使用反組譯碼器(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 《資訊安全系統設計基礎》第三周學習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.