分析 kernel32.dll中函数调用流程分析

闲来无事,用IDA, windbg, OD分析kernel32.dll函数调用流程笔记

1.先用分析 CreateFileW,CreateFileA 函数:

CreateFileA流程:

kernel32.dll!CreateFileA 流程
kernel32.dll!Basep8BitStringToDynamicUnicodeString
kernel32.dll!CreateFileWImplementation ; 实际就是导出表 CreateFil 地址
kernel32.dll!RtlFreeUnicodeString

kernel32.dll!CreateFileWImplementation 流程
ds:RtlInitUnicodeStringEx
BaseIsThisAConsoleName
API-MS-Win-Core-File-L1-1-0.CreateFileW ; 实际就是导入表 CreateFileW 地址

API-MS-Win-Core-File-L1-1-0.CreateFileW 流程
ntdll.dll!zwCreateFile
ntdll.dll!KiFastSystemCall
sysenter ;sysenter指令切入内核

1. 调用 CreateFileA后 会转换成UNICODE版本, 然后直接调用CreateFileW (CreateFileW的导出表地址)
2. 然后在调用 CreateFileW(CreateFileW的导入表地址, API-MS-Win-Core-File-L1-1.dll个人理解为转换层)
3. 导入表CreateFileW才是函数的实现, 继续调用
a. ntdll.dll!zwCreateFile
b. ntdll.dll!KiFastSystemCall sysenter
c. sysenter指令切入内核
....................
内核函数调用
....................
......................
省略xxxxxxxxx

CreateFileW流程:

kernel32.dll!CreateFileWImplementation ; 实际就是导出表 CreateFil 地址

kernel32.dll!CreateFileWImplementation
ds:RtlInitUnicodeStringEx
BaseIsThisAConsoleName
API-MS-Win-Core-File-L1-1-0.CreateFileW ; 实际就是导入表 CreateFileW 地址

API-MS-Win-Core-File-L1-1-0.CreateFileW
ntdll.dll!zwCreateFile
ntdll.dll!KiFastSystemCall
sysenter ;sysenter指令切入内核

总结一下,API调用过程
1. 如果API为A版本. 先转换为W版本, W版本不用转换
2. 通过 导出表的相应API地址 调用API, 经过若干个初始化功能函数调用
3. 通过 导入表的相应API地址 在调用API, 经过ntdll.dll!zwAPI 到ntdll.dll!ntAPI 的若干个调用后, 通过汇编指令
sysenter切入内核
4. 内核函数调用, 省略xxxxxxxxx

时间: 2024-10-12 21:42:12

分析 kernel32.dll中函数调用流程分析的相关文章

引用kernel32.dll中的API来进行串口通讯

串口通讯可以引出kernel32.dll中的API来操作,相关源码如下:using System;using System.Runtime.InteropServices; namespace Telehome.GSM{/// <summary>/// ************************************************************************************/// /// Function: 连接,断开串口;发送,接收串口数据,使用

分布式文件系统 fastdfs 源码分析 之 文件上传流程分析

fastdfs是一个轻量级的分布式文件系统,主要由 tracker server, storage server 以及client组成,这里主要涉及两点 : 1)客户端上传文件流程和协议分析 2)实现一个简单的文件上传函数 一: 文件上传的基本流程 fastdfs中上传一个文件,主要涉及以下几个步骤: 1)上传连接请求,客户端会向tracker server发出上传文件的请求 2)tracker收到请求后,返回storage server的ip和端口 3)客户端连接storage,并且上传文件

分析ntdll.dll和ntoskrnl.exe中的 NT*和ZW*函数区别

OpenProcess-->ntdll!NtOpenProcess-->ntdll!zwOpenProcess-->ntdll!KiFastSystemCall() ↓mov edx, esp ↓sysenter 用户层------------------------------------------------------------------------------------------------------ ↓ 内核层 nt!KiFastCallEntry()      

c语言中函数调用的本质从汇编角度分析

今天下午写篇博客吧,分析分析c语言中函数调用的本质,首先我们知道c语言中函数的本质就是一段代码,但是给这段代码起了一个名字,这个名字就是他的的这段代码的开始地址 这也是函数名的本质,其实也就是汇编中的标号.下面我们会接触到一些东西 比如 eip 就是我们常常说的程序计数器,还有ebp和esp (这里是俩个指针,记得我们以前学8086也就一个sp堆栈指针)分别为EBP是指向栈底的指针,在过程调用中不变,又称为帧指针.ESP指向栈顶,程序执行时移动,ESP减小分配空间,ESP增大释放空间,ESP又称

Android 7.0 ActivityManagerService(5) 广播(Broadcast)相关流程分析

本篇博客旨在分析Android中广播相关的源码流程. 一.基础知识 广播(Broadcast)是一种Android组件间的通信方式. 从本质上来看,广播信息的载体是intent.在这种通信机制下,发送intent的对象就是广播发送方,接收intent的对象就是广播接收者. 在Android中,为广播接收者定义了一个单独的组件:BroadcastReceiver. 1 BroadcastReceiver的注册类型 在监听广播前,要将BroadcastReceiver注册到系统中. Broadcas

14、流程分析法

什么是流程分析法? 流程分析法主要是针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,是从白盒测试设计方法中的路径覆盖分析法借鉴过来的一种方法. -在白盒测试中,路径就是指函数代码的某个分支组合,路径覆盖法需要构造足够的用例覆盖函数的所有代码路径. -在黑盒测试中,若将软件系统的某个流程看成路径的话,则可以针对该路径使用路径分析的方法设计测试用例.优点:>降低了测试用例设计难度,只要搞清楚各种流程,就可以设计出高质量的测试用例来,而不需要太多测试方面的经验:>在测试时间较紧迫的情况

Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Application 有何妙用: 5. MJ0011 关于 Native Application 的文章整理: 6. 互联网上其他关于 Native Application 的文章整理: 7. 小结: 1. 引子: 其实在好久以前就看了 MJ0011 翻译的那个<Native 应用程序详细>系列的文

解决Qt发布的程序在xp环境下提示“无法定位程序输入点 K32GetModuleFileNameExA 于动态链接库 KERNEL32.dll 上”的错误

用Qt开发时,调用系统API函数时的问题,在win7及以上系统没什么大问题.在xp下出现了标题描述的现象,导致无法启动程序.看了下网上的解决方案如下: 这里我要讨论的是在 WinSDK v7.0中的一些不友好的错误.如果你是一名开发者,并且当前使用的是VS2010编译器自带的 WinSDK v7.0,那么个别时候当你执行程序时,可能遇到这样的错误提示:The procedure entry point K32*** could not be located in the dynamic link

[转帖] 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决

原文:http://www.cnblogs.com/qinfengxiaoyue/archive/2013/02/01/2889668.html 转自:http://hi.baidu.com/qinfengxiaoyue/item/ff262ccfb53b4c2ba0b50a89 引自:http://blog.csdn.net/sptoor/archive/2011/02/23/6203376.aspx 对全文有改动. 提示:阅读前需要对静态库(.lib).动态库(.dll).导入库(这个还是.