1、int 0x2e進0環
步驟一:在idt中找到0x2e的門描述符
在windbug中用指令檢視idtr暫存器的值: r idtr
步驟二:分析cs/ss/esp/eip的**
這裡我們再來回顧一下中斷門描述符結構如下:
cs和eip在中斷門描述符中
cs:0x0008
eip:0x804df631
我們用 u 804df631命令來看一下
此處執行的kisystemservice()函式
2、sysenter進0環
在執行sysenter進0環時,作業系統必須指定0環的cs段、ss段、eip及esp
msr位址
a32_sysenter_cs
174h
ia32_sysenter_esp
175h
ia32_sysenter_eip
176h
可以通過 rdmsr/wrmst來進行讀寫(作業系統使用wrmst來寫該暫存器)
rdmsr 174 //檢視cs
rdmsr 175 //檢視esp
rdmsr 176 //檢視eip
3、總結
api通過中斷門進0環:
<1>固定中斷號0x2e
<2>cs/eip由門描述符提供,ss/esp由tss提供
<3>進0環後執行的核心函式nt!kisystemservice
api通過sysenter指令進0環:
cs/esp/eip由msr暫存器提供(ss是算出來的)
進入0環後執行的核心函式是nt!kifastcallentry
核心模組:ntoskrnl.exe(10-10-12分頁)0/ntkrnlpa.exe(2-9-9-12分頁)
API函式呼叫過程(3環進0環)
3環進0環需要換 cs eip ss esp 在中斷方式時,cs和eip在中斷門描述符裡面,ss和esp在tss裡面 通過msr暫存器獲得cs esp eip 的值,cpu計算這個值 ss的值等於cs 8 所以cs 0x8 時,ss 0x10 中斷方式路線 通過 kuser shared data ...
02 API呼叫過程(3環進0環上)
1 kuser shared data 1 在user和kernel層分別定義了乙個 kuser shared data結構區域,用於user層和kernel層共享某些資料。2 它們使用固定的位址對映,kuser shared data在user層和kernel層的位址分別為 user層位址為 0x...
03 WIndows程式設計 手繪函式呼叫過程
原始碼 1 include2 include3 4int messageboxprint char szformat,56 int winmain hinstance hinst,hinstance tmp,lpstr strcmd,int nshow 712 13int messageboxpri...