欢迎来到天天文库
浏览记录
ID:31726537
大小:187.41 KB
页数:4页
时间:2019-01-17
《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
此文档下载收益归作者所有