DOS時代的平坦模式,不區分用戶空間和內核空間,很不安全。
8060的分段模式
IA32的帶保護模式的平坦模式html
①指令集結構ISA是機器級程序的格式和行爲,定義了處理器狀態、指令的格式,以及每條指令對狀態的影響git
②機器級程序使用的存儲器地址是虛擬地址,提供的儲存器看上去是一個很是大的字節數組,其實是將多個硬件存儲器和操做系統軟件組合起來編程
編譯產生彙編代碼:gcc –s xxx.c 獲得.s文件
編譯產生目標代碼文件:gcc -o1 xxx.c 獲得.o文件
反彙編命令:objdump –d xxx
直接編譯64位處理器獲得32代碼的命令:gcc –S –o xxx.s xxx.c -m32數組
當即數:常數值,表示爲$c標準表示的整數
寄存器:表示某個寄存器的內容
存儲器:根據計算出來的地址訪問某個存儲器位置安全
1.後進先出的原則
2.push壓棧,pop出棧
3.棧頂:老是從這端插入和刪除元素
4.棧頂元素的地址是最低的
5.棧指針%esp保存着棧頂元素的地址函數
①加載有效地址:將有效地址寫入目的操做數,目的操做數必須是寄存器
②一元操做:只有一個操做數,既是源又是目的
③二元操做:源操做數是第一個,能夠是當即數、寄存器、存儲器,目的操做數是第二個,能夠是寄存器、存儲器,但兩個不能同時爲存儲器
④移位:第一個是移位量,用單個字節編碼且只容許0-31位的移位,能夠是當即數或者放在單字節寄存器%cl中(算術右移SAR,填上符號位/邏輯右移SHR,填上0)目的操做數能夠是一個寄存器或存儲器學習
CF:進位標誌
ZF:零標誌
SF:符號標誌
OF:溢出標誌測試
①根據條件碼的某個組合,將一個字節設置爲0或1
②能夠條件跳轉到程序的某個其餘部分
③能夠有條件的傳送數據編碼
SET指令根據t=a-b的結果設置條件碼操作系統
直接跳轉:後面跟標號做爲跳轉目標
間接跳轉:*後面跟一個操做數指示符
•if-else
•do-while
•while
•for
•swith
利用控制的條件轉移,當條件知足時就,程序沿着一條執行路徑進行,而當條件不知足時,就走另外一路徑。
數據的條件轉移方式
call指令有一個目標,即指明被調用過程起始的指令地址
call指令的效果是將返回地址入棧,並跳轉到被調用過程的起始處
ret指從棧中彈出地址,並跳轉到這個位置
ret指令返回到call指令後的那條指令
用棧來傳遞過程參數、存儲返回信息、保存寄存器用於之後恢復,以及本地存儲。爲單個過程分配的那部分棧稱爲棧幀。
最頂端的棧幀以兩個指針界定,寄存器%ebp爲幀指針,寄存器%esp爲棧指針
%eax,%edx,%ecx 調用者保存寄存器
%ebx,%esi,%edi 被調用者保存寄存器
%ebp,%esp 保持寄存器
1)進入GDB #gdb test
test是要調試的程序,由gcc test.c -g -o test生成。進入後提示符變爲(gdb) 。
2)查看源碼 (gdb) l
源碼會進行行號提示。
若是須要查看在其餘文件中定義的函數,在l後加上函數名便可定位到這個函數的定義及查看附近的其餘源碼。或者:使用斷點或單步運行,到某個函數處使用s進入這個函數。
3)設置斷點 (gdb) b 6
這樣會在運行到源碼第6行時中止,能夠查看變量的值、堆棧狀況等;這個行號是gdb的行號。
4)查看斷點處狀況 (gdb) info b
能夠鍵入"info b"來查看斷點處狀況,能夠設置多個斷點;
5)運行代碼 (gdb) r
6)顯示變量值 (gdb) p n
在程序暫停時,鍵入"p 變量名"(print)便可;
GDB在顯示變量值時都會在對應值以前加上"$N"標記,它是當前變量值的引用標記,之後若想再次引用此變量,就能夠直接寫做"$N",而無需寫冗長的變量名;
7)觀察變量 (gdb) watch n
在某一循環處,每每但願可以觀察一個變量的變化狀況,這時就能夠鍵入命令"watch"來觀察變量的變化狀況,GDB在"n"設置了觀察點;
8)單步運行 (gdb) n
9)程序繼續運行 (gdb) c
使程序繼續往下運行,直到再次遇到斷點或程序結束;
10)退出GDB (gdb) q
•實驗樓實驗
根據書上的步驟輸入gdb prog出現這種狀況,輸入bt/frame/up/down顯示NO STACK
按下圖方法便可
之前輸入git pull --rebase origin master後就能夠成功上傳,但此次出現了新的狀況
解決方法,多是git pull -rebase用的太多了,不用新建文件夾,直接保存在上週代碼的那個文件夾上傳就能夠了
博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|
目標 | 30篇 | 400小時 | |
第零周 | 1/1 | 20/20 | |
第一週 | 1/2 | 20/40 | |
第二週 | 1/3 | 20/60 | |
第三週 | 1/4 | 20/80 | |
第四周 | 0/4 | 00/80 | |
第五週 | 1/5 | 20/100 |