1,org ***: 表示從cs:***的地方開始定位
如:org 1000h
pg0:
org 2000h
pg1:
mov ds,[pg0+0x5] ;表示ds=[cs:1000h+0x5]
定址的段對應:
訪問方式 預設段 偏移位址 段超越
取指令 cs ip - - - - 對應指令:jmp,call,ret,iret,org,xx:
堆疊操作 ss sp - - - -
源串 ds si cs,es,ss
目的串 es di - - - -
bp ss (ea) cs,ds,es
一般資料 bx ds (ea) cs,es,ss 如:mov [1234h],0
2,call = push cs, push eip+x, jmp cs:eip (x為call指令長度+1)
ret = pop eip, pop cs, jmp cs:eip
int n = pushf, push cs, push ip+x, jmp [0x0:n<<2+2]:[0x0:n<<2]
iret = pop eip, pop cs, popf, jmp cs:eip
3,gdt基本址在gdr中,ldt表的基址是乙個描述符,在gdt中,而ldr放在gdt中描述符的選擇子.
新建程序時需要建ldt和tss並加入到gdt中,ldtr儲存當前程序在gdt中的索引,切換程序只需
長跳到gdt中tss段描述符就行了.cpu會借助tr暫存器(原程序選擇子)儲存原程序狀態.
1、rpl 選擇子當中的許可權位確定的許可權
2、cpl 特指cs中的選擇子當中的許可權位確定的許可權
3、epl epl=max(rpl,cpl),即rpl和cpl中數值較大的,或說許可權等級較小的
4、dpl 描述符中的許可權位確定的許可權
5、pl 泛指以上4種特權級
6、任務特權 =cpl
7、i/o特權 由eflags暫存器的位13、14確定的許可權
8、一致**段 一種特殊的**段,它在cpl>=dpl時允許訪問
正常的**段在cpl=dpl rpl<=dpl時才允許訪問
4, 緩衝區就是不會被換出頁的記憶體區
n, linux作業系統實現簡要步驟(作業系統的本質就是提供一堆服務而避免每個程式重複勞動)
0,boot(引導程式)被bios引導到0x7c00處並執行
1, 裝入啟動扇取和核心扇區.
2, 從bios取得硬體資訊.存好供核心使用
3,進入保護模式步驟:
a,關中斷
b,設定8259a pic,遮蔽可遮蔽中斷
c,載入idt到idtr,並讓idt中每個描述符指向乙個預設門(中段處理)
d,載入gdt到gdtr
e,開分段,設定cr0的pe位(第1位)
f,設定各段暫存器(ds,es,ss,fs,gs)
g,設定頁目錄和頁表並填充每一項
h,開分頁,設定cr0的pg位(第31位)
4,可以跳到前面載入到記憶體的核心了.
5,分配和界定可用的記憶體
6,初始化核心各個模組
7,將自己移到任務段0中執行,再建立程序1.
8,程序1將進行應用環境初始化.並執行shell登入程式
6,對分頁的理解:首先理解乙個概念,就是32位能定址4gb,不一定直接去尋,所謂平坦其實被後卻不平.
設想有個目錄,裡面放了1024個表的位址,每個表放了1024個頁的位址.那麼這32位線性位址就被分割
成三個索引了.
[高10位] [中10位] [低12位]
目錄項索引 表項索引 頁內索引
為什麼這麼分呢?原因很簡單,目錄和表的項是確定的,而每項的大小又是固定4bit,所以只須知道是這1024
項中哪乙個項就ok了.固正好用10位夠尋1024項. 然而對頁內的索引卻不然,因為你無法得到每項資料或
指令確切大小(其實這只是個附屬原因),頁還能再分嗎? 這樣正好也定址4gb,頁目錄的基址由cr3給出.
所以要訓練自己對保護模式的理解.看到乙個位址,第乙個概念就是它被分為三段.
7,理解保護多工的核心就是每個任務(程序)都有自己的頁目錄(其實就是擁有自己的整個4g記憶體),有自己的ldt,
有自己cpu暫存器.其實這些都是虛的.是tss的資料結構儲存了它們,再切換時恢復它們.
另外,多工下全域性或共享頁面的狀態如換出換入都是頁表項中相應位改變,實質只是在改變資料結構.
零散知識收集
success在介面com.opensymphony.xwork2.action中定義,另外同時定義的還有error,input,login,none。值得一提的是struts 2.0中的result不僅僅是struts 1.x中forward的別名,它可以實現除forward外的很激動人心的功能,...
零散的感想
全職英語學習已經兩周多了,馬上就三周了。這段時間的學習讓我變的很 懶 表現 計算機的學習由開始的每天學一點,發展到一點不學,到現在的不想看。靜下心來想想,這都是自己的問題,時間安排的不合理。應該每天都拿出點時間,乙個番茄的時間來溫習一下計算機,或者就不會太生疏,現在也不會糾結。乙個人不可能就幹一件事...
C 零散知識
全域性變數的初始化時機 c 是在編譯期初始化,c 是在程式執行時,main 函式之前初始化.不使用中間變數實現 strlen int mystrlen const char str c 語言函式引數入棧順序為從右至左。具體原因為 c 方式引數入棧順序 從右至左 的好處就是可以動態變化引數個數。通過棧...