nt系统从用户态到内核态的过程

nt系统从用户态到内核态的过程

ID:31726537

大小:187.41 KB

页数:4页

时间:2019-01-17

nt系统从用户态到内核态的过程_第1页
nt系统从用户态到内核态的过程_第2页
nt系统从用户态到内核态的过程_第3页
nt系统从用户态到内核态的过程_第4页
资源描述:

《nt系统从用户态到内核态的过程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、以windows2000为例的NT架构的系统内置三个子系统来支持WIN32>POSIX和OS/2应用程序。Win32子系统是最流行的一个,Win32接口实际上是做为整个系统的基础结构来实现的。Win32子系统包含一个名为Kernel32.dll的系统模块,但这并不是实际的操作系统内和,它只是Win32子系统的一个基本组建。Kernel-mode模块为于系统跟底层,在那里子系统是不可见的,该接口提供了NativeAPI接口。Win32子系统和NativeAPI之间的关系可以由Win32核心模块与Winodws2000内核模块之间的依赖关系很好的解释。Kernel

2、32.dll导出到的Win32API函数DeviceIoControl()最终会调用由ntdll.dll导出的NtDeviceIoControlFile()通过反汇编会看到:NtDeviceloControlFile:Moveax,38hLeaedxjesp+4]Int2eHRet28h首先CPU寄存器EAX被装入一个魔术数字0x38,这是一个分派ID,接下來寄存器EDX被设置指向堆栈中的某处、其地址为堆栈指针ESP加4。因此EDX将指向堆栈屮的返回地址的后面,该返回制定在进入NtDeviceloControlFile时被立即保存下来。显而意见EDX指向的位置

3、是用来临时存放传递进来的参数的。接下来的int2eh,该指令将跳转到中断描述符表(IDT)的0x2e位置上存放的中断处理例程。Win2000的INT2eh接口要比一个简单的API调用有用,分配器利用它从用户模式进入内核模式。Windows2000NativeAPI由248个函数组成,这些函数都采用这中方式进入内核。INT2eH随同传入CPU寄存器EAX和EDX的俩个参数一起被调用。处理INT2eh的代码必须确定每个调用将分配到那个函数,这就是提供分派ID的原因。位于ntoskrnl.exe中的中断处理例程将EXE中的数值作为一个索引来查询一个特定的表。这个表称

4、作系统服务表(SystemServiceTable)该表对应的C结构体■…SYSTEM_SERVICE_TABLE的structo在该列表中还包含SERVICE_DESCRIPTOR_TABLEd的sbuct,该结构共有四个SST类的数组。typedefNTSTATUS(NTAPI*NTPROC)();typedefNTPROC*PNTPROC;#defineNTPROC_sizeof(NTPROC)typedefstruct_SYSTEM_SERVICE_TABLE{PNTPROCServiceTable;//arrayofentrypointsPDWORD

5、CounterTable;//arrayofusagecountersDWORDServiceLimit;//NumberoftableentriesPBYTEArgumentTable//arrayofbyecounts}SYSTEM.SERVICE.TABLE,*PSYSTEM_SERVICE_TABLE,**PPSYSTEM_SERVICE_TABLE;//typedefstruct_SERVICE_DESCRIPTOR_TABLE{SYSTEM_SERVICE_TABLEntoskrnl;//ntoskml.exe(nativeapi)SYSTEM_S

6、ERVICE_TABLEwin32k;//win32k.sys(gui/usersupport)SYSTEM_SERVICE_TABLEtable3;//notusedSYSTEM_SERVICE_TABLEtable4}SYSTEM_DESCRIPTOR_TABLE,*PSYSTEM_DESCRIPTOR_TABLE,**PPSYSTEM_DESCRIPTOR_TABLE;从SDT的结构上可以看出来该结构的头俩个数组保留给了ntoskrnl.exe和Win32子系统中的内核模式部分。来gdi32.dll和user32.dll的调用都通过win32k的系统服务

7、表(SST)进行分派cNtolkml.exe导出了一个指针(符号为:KeServiceDescriptorTable)z指向其主服务描述表(MainSDT).内核还维护了一个替代的SDT其名称为:KeServiceDescriptorTableShadow,但这个SDT并没有被导出。从处于内核模式的模块中访问SDT非长容易://importSDTpointerExternPSERVICE_DESCRIPTOR_TABLEKeServiceDescriptorTable;//or//CreateSDTreferencePSERV1CE_DESCRIPT_TABL

8、Epsdt=KeServiceDesc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。