码迷,mamicode.com
首页 > Windows程序 > 详细

windows系统背景知识学习笔记

时间:2015-03-06 19:23:00      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:windows内核

前言

对于每天都要在windows平台上进行逆向工程任务的我们而言,稍微了解一些系统底层的机制与实现原理,用这些背景知识来武装自己总是好的。

调试器,反汇编器,加包,解包器,虚拟机,等等,无一不是运行在windows系统上,

甚至对内核调试器如SoftICE,WinDbg等工具的使用,也要求了解一些系统的内幕。


最近抽空在阅读《深入解析windows操作系统第6版上册》这本书,因此将其中与软件逆向有关的重点总结出来,部分内容加上了个人的理解进行润色,并非断章取义,而是去芜存菁。

笔记会不定期更新,对于某些作者的观点,尝试加入自己的实验过程来验证。


********************************

在windows系统架构中,运行在用户模式下的进程有4种基本类型,各自有其私有的进程地址空间:

1。固定的(或者硬性指定的)“系统支持进程“,比如登录(logon)进程,会话管理器(session manager)进程,它们并不是windows服务,也就是说,它们不是由“服务控制管理器”

来启动的。登录进程名为winlogon.exe,即“windows登录应用程序”,由此可见它是运行在用户模式下。会话管理器进程名为smss.exe,所有用户模式进程在sysinternal的进程浏览器

中,其“private bytes”列都会显示出使用的字节数;相反,内核模式组件或服务,其private bytes列中没有数据;服务控制管理器也是用户模式进程之一,其进程名为services.exe

2。服务进程,服务进程宿纳的是各种windows服务,这些服务可以通过运行services.msc来查看。windows服务往往要求独立于用户登录而运行(在用户登录前,以及用户不登录时,都

必须运行)svchost.exe就是服务进程,运行在用户模式下

3。用户应用程序

4。环境子系统服务进程

注意,服务进程与用户应用程序,并不直接调用原生的windows操作系统服务,而是先调用一个或者多个子系统DLL(动态链接库)中的A函数,

由A调用ntdll.dll中的相应B函数,B再调用原生的windows操作系统服务,后者运行在内核模式。

由此可见,子系统DLL运行在用户模式,它扮演的角色即是,通过子系统DLL中一个已经文档化的windows API函数,最终调用原生的系统服务,这些服务通常是未文档化的。

(注意这里的系统服务与前面提到的windows服务是两个不同的事物)

补充说明,关于“子系统DLL的支持DLL”:ntdll.dll

ntdll.dll是一个特殊的系统支持库,主要被其它的子系统DLL使用。应用程序调用某个子系统DLL中的windows API 函数,后者再调用ntdll.dll中的相应函数,例如NtCreateFile,

NtSetEvent等。虽然这些以Nt开头的函数仍旧是运行在用户模式,但是这些函数内部的代码包含了与处理器体系结构相关的“处理器特权模式”切换指令,通过该指令可以切换到内核模式,

从而调用内核模式下的“系统服务分发(调度)器”。系统服务分发器在检查某些参数的合法性以后,再由它调用真正的内核模式系统服务,其中包括Ntoskrnl.exe内部的实际代码。

也就是说,从用户模式到内核模式的转换点位于ntdll.dll中的函数内部。

********************************



本文出自 “自由,平等,共享,互助” 博客,请务必保留此出处http://shayi1983.blog.51cto.com/4681835/1617979

windows系统背景知识学习笔记

标签:windows内核

原文地址:http://shayi1983.blog.51cto.com/4681835/1617979

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!