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中的函数内部。

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

时间: 2024-11-22 21:39:07

windows系统背景知识学习笔记的相关文章

rhythmbox插件开发笔记2:背景知识学习 D-Bus&VFS&Gio& Python GTK+ 3

这次主要简单介绍下相关的背景知识 D-Bus&VFS&Gio& Python GTK+ 3  D-Bus D-Bus是开源的进程通信(IPC)系统,它允许多个进程进行实时通信.D-Bus提供以下功能: 完成在同一个桌面会话下的多个桌面应用程序间的通信,将整个桌面会话联合成一个整体,并为进程分配生存期 完成桌面会话和操作系统的通信,其中的操作系统包括内核,守护进程和进程 http://en.wikipedia.org/wiki/D-bus 下面一张图解释了linux下图形编程的一切:

windows下scrapy框架学习笔记—'scrapy' 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令

端口相关知识学习笔记

端口相关知识学习笔记 端口相关知识学习笔记 本周主要精力是放在挂接上,所以知识矩阵的学习回归到根本上,所以这周发的学习笔记是关于计算机端口的相关介绍. 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入.计算机的" 大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口.并口.输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软

[转]Windows平台下Makefile学习笔记

Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安装VS2010,我想在VS2008下编译这些代码):另一方面源码在服务器端编译的话,使用IDE的方式编译还是不太方便. 本文主要分为三部分:第一部分讲述namke工具使用makefile的用法:第二部分讲述makefile的主要语法:

windows内核对象管理学习笔记

目前正在阅读毛老师的<windows内核情景分析>一书对象管理章节,作此笔记. Win内核中是使用对象概念来描述管理内核中使用到的数据结构.此对象(Object)均是由对象头(Object Header)组成,实际上由于对象头概念的特殊结构,还有些可选成分.于是一个对象实际上是分为三部分. OBJECT_HEADER对象头. 数据本体(比如文件对象File Object.Event等) 附加信息(比如Object Header Name Info等) 结构如下: //摘录自 Reactos代码

ARM基础知识学习笔记

/*****************数电知识*******************/ PN结(Positive-Negative) 三极管:BJT(双极结型三极管Bipolar Junction Transistor)               FET(场效应管Field Effect Transistor)          (单极结型) 1.MOSFET (金属氧化物半导体Metal Oxide Semiconductor FET)               2.JFET(结型Junct

linux系统构建基础学习笔记——操作

linux系统构建 ********************************************************                  ---交叉编译环境构建--- 安装arm-linux-gcc-4.3.2 (交叉编译器) tar xzvf arm-linux-gcc-4.3.2.tgz -C /cd /usr/local/arm/4.3.2/bin./arm-linux-gcc -v在/etc/bashrc文件的最后添加如下一行:   export PATH=

C++基础知识学习笔记

基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个对象对象=(数据结构+算法)  ,程序=(对象+对象+对象+--) 面向对象程序设计的程序员有两类:1.面向对象应用程序设计2.类库的设计 头文件:类的声明            ---类的外部接口       (成员函数在类声明中实现时,一般很简短,默认为内联函数)源文件:类的成员函数定义     -

linux系统驱动基础学习笔记

Linux驱动: 角色:应用程序 API      操作系统      驱动       实际硬件 功能:1.对设备进行初始化和释放2.把数据从内核传送到硬件和从硬件读取数据3.检测和处理设备出现的错误 Linux驱动程序类型:字符设备:由文件系统管理    (通过设备文件访问)块设备:由文件系统管理网络设备:由协议栈管理      (通过socket访问) 查看系统设备文件ls -l /devcat /proc/devicescat /sys/power/state 属性:文件类型   主设备