日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

(46)分析 INT 0x2E 和 sysenter

發布時間:2025/3/21 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (46)分析 INT 0x2E 和 sysenter 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、回顧

上次課我們學習了3環進0環的兩種方式,分別是中斷門和快速調用,如果CPU支持快速調用,那么_KUSER_SHARED_DATA 結構體的 SystemCall 屬性指向的函數是 KiFastSystemCall;如果不支持,那么SystemCall 指向的函數是KiIntSystemCall。

執行 KiFastSystemCall,則使用快速調用的方式進0環;
執行 KiIntSystemCall,則使用中斷門的方式進0環。

共同點是都要給0環提供新的CS,SS,EIP,ESP,只是提供的方式不同。中斷門的CS,EIP從IDT表里獲取,SS,ESP從TSS表里獲取;快速調用的CS,EIP,ESP從MSR寄存器獲取,SS是CS+8計算得到,至于MSR寄存器里的值,則是系統啟動時就已經填好。

所以快速調用比中斷門快就快在,快速調用不需要訪問內存,而中斷門需要讀TSS和IDT表。

這節課,我們來詳細分析 INT 2E 和 sysenter 做了哪些工作。

二、分析 INT 0x2E

KiIntSystemCall 觸發了 2E 中斷。用windbg看看2E號中斷的中斷門描述符,2E 右移3位(或者乘8)得到 0x170,加上 r idtr獲取的IDT基址,可以計算出 2E號中斷對應的描述符:8053ee00`0008e481

kd> r idtr idtr=8003f400 kd> dq 8003f400+170 8003f570 8053ee00`0008e481 80548e00`00081780

拆分中斷門描述符,可以得到新的CS是0008(系統代碼段),EIP是 8053e481,這個是內核模塊的 KiSystemService 函數。

kd> u 8053e481 nt!KiSystemService: 8053e481 6a00 push 0 8053e483 55 push ebp 8053e484 53 push ebx 8053e485 56 push esi 8053e486 57 push edi 8053e487 0fa0 push fs 8053e489 bb30000000 mov ebx,30h 8053e48e 668ee3 mov fs,bx

接下來查看 TSS 表,首先看看tr寄存器的值,是0x28,然后看看TSS描述符:

kd> dq 8003f000 8003f000 00000000`00000000 00cf9b00`0000ffff 8003f010 00cf9300`0000ffff 00cffb00`0000ffff 8003f020 00cff300`0000ffff 80008b04`200020ab

TSS描述符是 80008b04`200020ab

所以TSS的地址就是 80042000,dd看一下:

kd> dd 80042000 80042000 0c458b24 8054acf0 8b080010 758b0855

所以ESP0 = 8054acf0, SS0 = 0010。

三、分析 sysenter

sysenter 是從 MSR 寄存器里讀取 CS0,ESP0,EIP0,而SS0是通過CS0+8計算得來。我們可以用 rdmsr 指令在windbg里查看 MSR 寄存器,也可以用 wrmsr 修改MSR寄存器。

MSR地址
IA32_SYSENTER_CS174H
IA32_SYSENTER_ESP175H
IA32_SYSENTER_EIP176H

查看 CS,ESP,EIP

kd> rdmsr 174 msr[174] = 00000000`00000008 kd> rdmsr 175 msr[175] = 00000000`f8ac2000 kd> rdmsr 176 msr[176] = 00000000`8053e540

其中,EIP是 KiFastCallEntry 函數:

kd> u 8053e540 nt!KiFastCallEntry: 8053e540 b923000000 mov ecx,23h 8053e545 6a30 push 30h 8053e547 0fa1 pop fs 8053e549 8ed9 mov ds,cx 8053e54b 8ec1 mov es,cx 8053e54d 8b0d40f0dfff mov ecx,dword ptr ds:[0FFDFF040h] 8053e553 8b6104 mov esp,dword ptr [ecx+4] 8053e556 6a23 push 23h

四、總結

API通過中斷門進0環:

1) 固定中斷號為0x2E 2) CS/EIP由門描述符提供 ESP/SS由TSS提供 3) 進入0環后執行的內核函數:NT!KiSystemService

API通過sysenter指令進0環:

1) CS/ESP/EIP由MSR寄存器提供(SS是算出來的) 2) 進入0環后執行的內核函數:NT!KiFastCallEntry

int 0x2e 和 sysenter 指令進0環后,分別調用了兩個函數 KiSystemService 和 KiFastCallEntry。

下一篇博客,我將逆向分析 KiSystemService 和 KiFastCallEntry 這兩個函數。

總結

以上是生活随笔為你收集整理的(46)分析 INT 0x2E 和 sysenter的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。