kernel32.dll!API調用流程分析


用IDA, OD分析kernel32.dll的API調用流程,知其所以然。


1.用CreateFileW,CreateFileA函數來分析


CreateFileA 整個流程:

kernel32.dll!CreateFileA流程
kernel32.dll!Basep8BitStringToDynamicUnicodeString
kernel32.dll!CreateFileWImplementation ; 實際就是 kernel32.dll導出表 CreateFil 地址
kernel32.dll!RtlFreeUnicodeString


每個流程的包含流程:
A. kernel32.dll!CreateFileWImplementation流程
ds:RtlInitUnicodeStringEx
BaseIsThisAConsoleName
API-MS-Win-Core-File-L1-1-0.CreateFileW ; 實際就是 kernel32.dll導入表 CreateFileW 地址


B. API-MS-Win-Core-File-L1-1-0.CreateFileW流程
ntdll.SbSelectProcedure
ntdll.dll!zwCreateFile
調用完成, CreateFileA返回.....

C. ntdll.dll!zwCreateFile流程
ntdll.dll!ntCreateFile
ntdll.dll!KiFastSystemCall
sysenter ;sysenter指令切入內核

 /*-------------------------------------------------------------------------------------------------*/

CreateFileW整個流程:
kernel32.dll!CreateFileWImplementation ; 實際就是 kernel32.dll導出表 CreateFil 地址

 /*----------------------------------------------------------------------------------------------------------*/

流程描述:
1. 調用 CreateFileA后 會轉換成UNICODE版本, 然后直接調用CreateFileW(就是導出表的CreateFileW地址)
2. 然后在調用 CreateFileW(就是導入表CreateFileW地址, API-MS-Win-Core-File-L1-1.dll理解為轉換調用下)
3. 導入表的CreateFileW才是函數的實現, 繼續調用a,b,c

a. xxx初始api, ntdll.dll!zwCreateFile, ntdll.dll!ntCreateFile
b. ntdll.dll!KiFastSystemCall
c. sysenter指令切入內核
....................
內核函數調用
....................
......................
省略xxxxxxxxx

 


總結一下心得:
1. 如果API為A版本. 先轉換為W版本, W版本不用轉換, CreateFileA和CreateFileW的流程都一樣, 前者比后者多了一個unicode轉換。
2. 通過 導出表的相應API地址 調用API, 經過若干個初始化功能函數調用
3. 通過 導入表的相應API地址 在調用API, 經過ntdll.dll!zwAPI 到ntdll.dll!ntAPI 的若干個調用后, 通過匯編指令
sysenter切入內核
4. 內核函數調用, 省略xxxxxxxxx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM