[windows內核]代碼段跳轉實驗

本次實驗是爲了加深對跨段跳轉流程的印象
首先選一個已有的非一致代碼段的段寄存器,將其複製過來,寫入一個GDT表裏無效的位置中,怎麼區分段寄存器是否是代碼段前面已經有了,這裏不再重複
在這裏插入圖片描述
成功寫入
在這裏插入圖片描述
之後打開R3調試器
輸入彙編指令修改JMP FAR 004B:0040130C
4B是因爲我們剛纔修改GDT表裏段寄存器的位置在第9個,RPL不變
在這裏插入圖片描述
如果成功執行那麼cs和eip都會改變
我們單步一下
在這裏插入圖片描述
可以看到成功執行了

如果我們把我們修改的段寄存器DPL修改爲0是否還能執行成功呢
我們來嘗試一下
在這裏插入圖片描述
還是原來的位置但是DPL已經被我們修改成了00,怎麼改的可以看以前分析段寄存器的文章
我們還是打開R3的調試器寫入彙編JMP FAR 004B 0040130C,和上面操作一樣如果執行成功cs和eip會改變,這時候我們單步一下
在這裏插入圖片描述
可以看到主線程模塊直接進入了異常,這就和我們之前說的代碼段跳轉流程的一致,段權限檢查沒有通過,因爲非一致代碼段 要求CPL == DPL 並且 RPL <= DPL
這裏CPL=3 DPL=0 所以段權限檢查失敗

我們繼續實驗,如果這是個一致代碼段的效果又會怎麼樣呢
怎麼改就是TYPE域中的C位

在這裏插入圖片描述
我們再來重複上面的操作看是否能成功
在這裏插入圖片描述
可以看到是成功的執行了跳轉,如果是一致代碼段,那麼是允許低權限跳轉到高權限的,這裏手冊的3.4.5.1 中有說明
在這裏插入圖片描述
至於爲什麼就是我們之前說到的,在手冊中5.8.1.2可以找到

在這裏插入圖片描述
實驗已經做完了
大概對代碼段跳轉流程已經有了更深的印象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章