React OS 中的 Kernel32.dll & Ntdll.dll & ntoskrnl 所導出的函數

好久沒有更新了,一眼看去最後一次更新還是 07 年。相隔了一年多啊。

今天記錄一些研究 ROS 後的結論,防止以後忘記。

 

ROS 中(同理 Windows 中)的 App 所調用的 API 先是通過 Kernel32.dll 中的函數然後由此再通過 Ntdll 中的 "sysenter" 指令進入內核中的 ntoskrnl.exe 調用最後的函數。當然有些不需要進入內核的則直接在 Kernel32 中實現的。
ntoskrnl & Ntdll.dll 中分別導出了兩套前綴爲 Nt* & Zw* 的函數。Ntdll 中的兩套函數地定義一模一樣,都是通過 eax edx 還傳遞 service index 和調用參數,最後進入 "sysenter" 的。而 ntoskrnl 中的 Nt* 是真正的函數定義。Zw* 則通過 eax edx 調用的 KiSystemService。


其中 ntdll 中的 Nt* & Zw* 還有 ntoskrnl 中的 Zw* 都是 ROS 中的一個 ncitool.c 在編譯過程中生成的。分別存在於 ntdll.s win32k.s zw.s 中。

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