因為考研,真的無法深入做題。而且考研都快涼了啊。真是個大菜雞啊。
將源**轉換為可以執行**的過程
linux> gcc-og -o p p1.c p2.cc語言擴充套件器擴充套件源**,插入所有用#include命令制定的檔案,並擴充套件所有用#define宣告制定的巨集
編譯器產生兩個原始檔的彙編**,分別為p1.s p2.s
彙編器將彙編**轉化成二進位制目標**檔案p1.o,p2.o
聯結器將兩個目標**與實現庫函式(如printf)的**合併,最終產生可執行**檔案
機器級**
設計理念:利用更簡單的抽象模型來隱藏實現的細節
設計例項:機器級程式設計的兩種重要抽象
指令級體系結構或指令級架構(instruction set architecture,isa):定義了機器級程式的格式和行為,它定義了處理器狀態、指令的格式,以及每條指令對狀態的影響。
虛擬位址
機器執行的程式知識乙個位元組序列,它是對一系列指令的編碼。機器對產生這些指令的源**幾乎一無所知。
指標是c語言的乙個核心特色。他們以一種同一方式,對不同資料結構中的元素產生引用。
c語言對於陣列引用不進行邊界檢查,而且區域性變數和狀態資訊都存放在棧中。這樣導致了對月借書組元素寫的操作會破壞儲存在棧中的狀態資訊
如何避免?
棧隨機化:讓你不知道我在哪,你攻擊個屁
棧破壞檢測 :在棧組織中插入一段。完了看這段有沒有被改變。被改變了就說明被攻擊了,就直接報錯。不呼叫就行了。
限制可執行**區域:只有編譯器產生的**的那部分記憶體才是可執行的,其他部分可以被限制為只允許讀和寫。
讀書筆記 《csapp》第三章 第六七節
第七節 過程 包括描述表達迴圈和switch 語句的方法 cpu 維護著一組單個位的條件碼暫存器,他們描述了最近的算數或邏輯操作的屬性。可以檢測這些暫存器來執行條件分支指令。cf unsigned t unsigned azf t 0 sf t 0 of a 0 b 0 t 0 a 0 可以根據條件...
第三章讀書筆記
程序管理 3.1程序 程序就是處於執行期的程式 目標碼存放在某種儲存介質上 但程序並不僅僅侷限於一段可執行程式 執行執行緒,執行緒,是程序活動的物件。兩種虛擬機制 虛擬處理器和虛擬記憶體。最終,程式通過exit 系統呼叫退出執行。3.2程序描述及任務結構 核心把程序的列表存放在叫做任務佇列的雙向迴圈...
第三章讀書筆記
本章是講了git的使用入門,為學習本書的人展示了git的基本用法。儘管git並不是學習android移植和linux核心 驅動開發必須掌握的技術。但對於深入研究這些底層技術的人來說,git將成為學習過程中必不可少的工具。git是什麼,git就是乙個開源的分布式版本控制系統,用以有效 高速的處理從很小...