最近學習了核心程式設計,雖然說學的比較淺,但是也不能有一絲絲的懈怠,生怕自己聽不懂,又被班同學落(la)下……就如我的qq個性簽名一樣,「有的時候,我們不停地跑啊跑,只是為了能追上那個被寄予厚望的自己……」
作業系統的核心是非常強大的,強大到令你吃驚,記憶體管理,程序管理,中斷機制,保護機制……核心中沒有程序,只有執行緒,都是屬於系統程序下的執行緒,所以我們載入的驅動,都是跑在系統程序下的執行緒,我們想要幹點「壞事」的話,掛靠到ring3的程式是件不錯的事,比如可以不停的讀取被掛靠程序空間,隨意寫入記憶體,使之程式崩潰,這就達到我們的目的了,當然部分程式的健壯性還是很不錯的,會有一些軟體保護機制,我這裡說的是除了殼以外的保護機制,反除錯機制等等。我們在核心層載入後的驅動就會變成核心中的乙個執行緒,此時這個執行緒的cr3還是系統的,cr3 = 0x00185000,這裡說下cr3的具體含義,它是乙個程序的首位址,乙個程序下所有執行緒的cr3都是相同,執行緒共用系統給程序分配的4gb空間,高2gbring3程式是無法訪問的。所以簡單點說,我們只需要將cr3的位址切換成被掛靠程序的cr3位址就可以了,就能實現程序掛靠。手動在windbg下修改很容易導致系統崩潰藍屏,所以我們一般在虛擬機器裡做這些實驗就可以了。
這是ring3被掛靠程式**
int _tmain(int argc, _tchar* argv)
這是驅動程式
#include
//函式宣告部分
void driverunload(pdriver_object pdriver);
ulong psgetprocesspeb(peprocess process);
//函式作用:通過傳程序pid可以獲取eprocess結構體指標
peprocess lookupprocess(handle hpid)
//函式作用:引數是乙個程序的eprocess結構體指標
//可以實現驅動掛靠到使用者層(ring3,也說三環)
void attach(peprocess process)
//驅動解除安裝函式
void driverunload(pdriver_object pdriver)
ntstatus driverentry(pdriver_object pdriver, punicode_string ppath)
vue router之學習筆記
用 vue.js vue router 建立單頁應用,是非常簡單的。使用 vue.js 我們已經可以通過組合元件來組成應用程式,當你要把 vue router 新增進來,我們需要做的是,將元件 components 對映到路由 routes 然後告訴 vue router 在 渲染它們。在vue開發...
Linux核心 驅動學習筆記 一
今天討論到核心啟動階段對外部裝置初始化的過程,於是粗略的看了一下相關 得到以下一些印象 未必正確,希望大家指正 1.對外部裝置初始化 出現的地方應該是 init 程序 bootloader start 彙編 decompress start kernel rest init kernel threa...
Linux核心 驅動學習筆記 二
linux是如何管理記憶體的?今天系統的整理一下這個問題。在系統的初始化階段,核心根據檢測到的物理記憶體的大小,為每乙個頁面都建立乙個page結構,形成乙個page結構的陣列,並使乙個全域性量mem map指向這個陣列。同時又按需要將這些頁面拼合成許多記憶體頁面塊,再把塊組成管理區zone,分配和釋...