zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Tapestry AppModule中的方法
    Tapestry Grid
    Tapestry5之AutoLoading Module
    Tapestry Submits
    Tapestry SubmitLink
    再读Struts2之一:总括
    Java war包取之外的properties文件
    用ORACLE的高级复制实现内外网数据同步【转】
    在Oracle中实现数据库的复制
    解决ORA12560: TNS: 协议适配器错误
  • 原文地址:https://www.cnblogs.com/mayingkun/p/5408663.html
Copyright © 2011-2022 走看看