PDE PTE和PDE PTE屬性(P和RW)

2022-09-22 01:33:11 字數 2099 閱讀 3436

前言:pde_pte的學習筆記

這篇學完後,就可以知道實體地址中的任何的乙個記憶體位址,沒有地方是訪問不了的,最重要的就是保護模式,其實也就是繞過保護模式來實現任意實體地址的讀寫,更準確的就是學習pde和pte來實現對物理頁的修改操作

上篇學習分頁10-10-12的筆記中,潦草的概述的相關的一級,二級物理頁,這篇筆記來學習記錄相關的物理頁的知識點

從這張圖中可以看出來,其實一級物理頁對應的就是頁目錄表,頁目錄表中有1024個頁目錄項(也就是pde結構,每個佔四個位元組),所以頁目錄項的大小為4096個位元組

接著就是二級物理頁對應的就是頁表,頁表中有1024個頁目錄項(也就是pte結構,每個佔四個位元組),所以頁表的大小為4096個位元組

其中pte指向的物理頁,其實就是代表著乙個線性位址在物理記憶體中的真正儲存的位址

知識點:

1、pte可以沒有物理頁,且只能對應乙個物理頁.

2、多個pte也可以指向同乙個物理頁.

pte所指向的物理頁的屬性是由pde中的屬性和pte的屬性共同決定的 => 物理頁的屬性 = pde屬性 & pte屬性

通過觀察下面的pde和pte的結構,這裡一些屬性我們需要了解,這裡可以先看p位的屬性,想要看物理頁是否有效,就需要看pde與pte的p位是否都為1,只有都為1的才是有效的物理頁

當pde和pte的r/w = 0 唯讀屬性

當pde和pte的r/w = 1 可讀可寫

測試**如下,經過windbg除錯,可以發現乙個程序中0位址的pte中是沒有物理頁的

預設線性位址0不能讀寫的原因就是預設乙個程序中0位址的pte中是沒有物理頁的

所以如果想要實現0位址設定可讀可寫,那麼我們就需要修改其線性0位址所對應的pte和pde的屬性,也就是十六進製制的後三位

測試**如下圖所示,然後來構造定義的x變數的位址為0x12ff7c,拆分如下

0012ff7c 

->

0000 0000 00

01 0010 1111 -> 4bc

f7c

然後接著就是該線性位址0x12ff7c的實體地址,如下圖所示,這個位址0x3a14f867,就是pte中儲存的位址的值,那麼這個值就是指向乙個物理頁的位址

這裡將0位址中預設儲存的pte為00000000的值改為3a14f867(這裡的867後12位也需要一樣的,因為都是需要可讀可寫),也就是上面變數x的pte中儲存的值,那麼此時0線性位址中指向的物理頁和變數x所指向的物理頁是同乙個物理頁

自己的想法是這樣的,通過新的位址來讀取變數x的值,然後這個新的位址又不能跟變數x的線性位址一樣

10-10-12,分別就是210*210*212,也就是232,那麼最多範圍就是4g定址

乙個程序中,2個線性位址可以通過線性位址的前5位(十六進製制的情況下)是否相同來判斷是否在同乙個物理頁

Alt屬性和Title屬性

當瀏覽器賣主扭曲了標準並且自顧自的不按規則去做一些事,他們可能會造成一些問題,或者至少產生了混淆。例子之一就是一些瀏覽器處理alt屬性 一般會被錯誤的稱作alt標籤 的方式,比如擁有大量使用者的windows的ie瀏覽器。替換文字 alt text 並不是用來做提示 tool tip 或者更加確切的...

例項屬性和類屬性

例項屬性和類屬性 由於python是動態語言,根據類建立的例項可以任意繫結屬性。給例項繫結屬性的方法是通過例項變數,或者通過self變數 class student object def init self,name self.name name s student bob s.score 90但是...

alt屬性和title屬性

alt屬性和title屬性 當瀏覽器賣主扭曲了標準並且自顧自的不按規則去做一些事,他們可能會造成一些問題,或者至少產生了混淆。例子之一就是一些瀏覽器處理alt屬性 一般會被錯誤的稱作alt標籤 的方式,比如擁有大量使用者的windows的ie瀏覽器。替換文字 alt text 並不是用來做提示 to...