03 API呼叫過程(3環進0環下)

2021-09-10 19:24:37 字數 1187 閱讀 1990

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...