Windows中系統調用的流程

來源:互聯網
上載者:User
Windows中系統調用的流程

潘愛民,2010.9.24

在《Windows核心原理與實現》一書,我曾經詳細地解析了Windows應用程式發出的系統調用,經過ntdll.dll中的stub函數,再通過sysenter/syscall或int 2eh指令,調用到核心的完整過程。圖8.5中有一個錯誤(感謝讀者liucy指出這一錯誤),正確的圖應該如下所示。

圖中紅色文字是改正之後的函數名稱。這裡實際上把通過sysenter或int 2eh兩種情形的系統調用流程畫在一起,所以顯得較為複雜。如果拆開來,畫成兩個圖,可能會更加容易理解。下面是按照sysenter/sysexit指令的系統調用流程:

而按照int 2eh來進入核心的流程更加簡單一些:

無論是哪一種情形,對於ntdll.dll中的NtCreateFile或ntoskrnl.exe中的NtCreateFile函數,它們無 須關心系統調用是怎樣發生的。

關於這兩種情形下系統調用的詳細穿透過程,請參考這本書的8.1.2節,這裡不再進一步介紹。最後看一個系統調用棧:

f5484c94 808e3375 nt!IopCreateFile
f5484cf0 808e50ec nt!IoCreateFile
f5484d30 80882a2c nt!NtCreateFile
007deed8 7c8211f4 ntdll!KiFastSystemCallRet
007deedc 76cf2707 ntdll!ZwCreateFile+0xc
007def54 76cf276b iphlpapi!OpenTCPDriver+0xad
007def64 76cf278f iphlpapi!CheckTcpipState+0x62
007def98 76cf299a iphlpapi!GetIpStatsFromStack+0xd
007df00c 76cf32de iphlpapi!GetInterfaceInfo+0x38
007df028 76cf3230 iphlpapi!GetAdapterNameToIndexInfo+0x1e
007df060 76cf6a6b iphlpapi!GetAdapterInfo+0x18
007df0b4 4e7fdf36 iphlpapi!GetAdapterInfoEx+0x1c
007df504 4e7fe2f9 WINHTTP!CIpConfig::GetAdapterListOnNT5+0x6e
007dfac4 4e7fe938 WINHTTP!CIpConfig::GetAdapterList+0x58
...

注意,這裡ntdll!ZwCreateFile的符號地址等同於ntdll!NtCreateFile。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.