Windows Internals学习笔记(一)概念与工具
参考资料:
1. 《Windows Internals》
4. WDK下载地址
知识点:
1. Windows Drive Kit(WDK)是微软提供的用于Windows平台的设备驱动软件开发工具集。它包括:文档、实例、Build环境和为驱动开发人员提供的开发工具。早期,它以Windows Driver Development Kit(DDK)闻名,支持Windows Driver Model(WDM)开发。目前的名词是诞生于Vista的发布,并增加了以下工具:
● Windows Driver Foundation (WDF)
● Installable File System Kit (IFS Kit)
● Driver Test Manager (DTM)
2. Microsoft Windows SDK,Platform SDK和.Net Framework SDK是微软提供的软件开发工具集。它包括:头文件、库文件、实例、文档和用于开发应用程序的工具。注意它们三者的区别(见Wiki)。
3. Windows API是用户态下的编程接口。常听说的有Win32 API和Win64 API。

图1 Win API分类
4. Microsoft .NET Framework由类库Framework Class Library(FCL)和Common Language Runtime(CLR)组成。CLR是提供了可托管代码的执行环境,是一个经典的COM server,它的代码存在于标准的用户态Windows DLL中。实际上,.NET Framework中的所有组件都是基于非托管Windows API并实现为标准用户态的Windows DLL中的。

图2 .NET Framework各组件之间的关系
5. Windows进程的组成:
● 一个私有的虚拟地址空间。
● 一个可执程序。
● 一个开放的句柄列表,用于访问各种系统资源。比如,信号量、通信接口和文件等。
● A security content called an access token。
● A unique identifier called a process ID。
● 至少有一个执行进程(At least one thread of execution)。
6. 每一个进程会指向其父进程或子进程。如果父进程不存在了,该信息不会被更新。因此,很有可能一个进行会引用一个不存在的父进程。但这不是问题,因为没有谁会依赖这些存于当前进程的信息。
7. Windows线程的组成:
● 一组CPU寄存器的内存,代表了处理器的状态。
● 两个栈,一个用于内核模式,一个用于用户模式。
● 一个私有存储区TLS(thread-local storage)。
● 唯一标识符(thread ID)。
● 线程有时候拥有各自的security context或token。
8. 线程的上下文包括:volatile寄存器,栈和私有存储区。
9. 作业是进程模型的扩展,一个进程对象的主要功能是把一组进程被当做一个单元来进行管理和操作。在一定意义上,作业对象弥补了Windows缺乏结构化进程树的缺陷。
10. Windows内部大多数文本字符串都是以Unicode字符存储的。因此,当调用ANSI版本的Windows函数时,会有一定的性能影响。
11. Symbol文件包含了函数和变量的名字,以及数据结构的布局和格式。它们由linker程序产生,被debugger程序使用。因此,这些信息是不存在二进制文件中的。也因此,二进制文件才更小、更快。
12. User-Mode debugging分Invasive和Noninvasive两种模式。工具:命令行版Kd.exe和GUI版Windbg.exe。
13. LiveKd是一个免费工具,它允许你使用标准的Windows内核调试工具去检查运行时系统,且无须在调试模式下重启系统。


Windows Internals学习笔记(一)概念与工具的更多相关文章
- Windows Internals学习笔记(八)IO系统
参考资料: 1. <Windows Internals> 知识点: ● 当一个进
- Windows Internals学习笔记(七)Image Loader
参考资料: 1. <Windows Internals> 2. Fibers 知识点: ● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务.然而, ...
- Windows Internals学习笔记(六)Windows关键系统组件
参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...
- Windows Internals学习笔记(五)Synchronization
参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...
- Windows Internals学习笔记(四)Trap Dispatching
参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...
- Windows Internals学习笔记(二)系统架构
参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...
- Windows Internals学习笔记(三)Procdump的使用
参考资料: 1. 下载地址 2. 使用示例
- Oracle RAC学习笔记:基本概念及入门
Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章] oracle 10g real applica ...
- Java IO学习笔记:概念与原理
Java IO学习笔记:概念与原理 一.概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...
随机推荐
- HTML data属性简介以及低版本浏览器兼容算法
实例 使用 data-* 属性来嵌入自定义数据: <ul> <li data-animal-type="bird">Owl</li> <l ...
- MyBatis关联查询分页
背景:单表好说,假如是MySQL的话,直接limit就行了. 对于多对多或者一对多的情况,假如分页的对象不是所有结果集,而是对一边分页,那么可以采用子查询分页,再与另外一张表关联查询,比如: sele ...
- include指令
include:文件加载指令(用于在JSP文件中插入一个包含文本或代码的文件.把文件插入后和原来的JSP文件合并成一个新的JSP页面.) 语法格式:<%@ include file=" ...
- json-encode()怎么进行解码呢?
解决中文的一种方法就是先将中文转换为另一种编码格式,然后再使用json_encode(),最后再用解码把json串进行解码.还有一种方式就在php新版本中得到了解决,在下面的代码为展示. 以下为代码示 ...
- 删除 SQL Server 2005 Express 工具
安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 ...
- destoon 会员整合Ucenter/Discuz!/PHPWind教程
首先进入 Destoon网站后台 -〉会员管理 -〉模块设置 -〉会员整合 假如需要整合的主站地址为 http://www.abc.com 论坛为 http://bbs.abc.com 1.整合Uce ...
- PullToRefresh 下拉刷新的样式修改
资源文件结构图, 先看看下拉刷新头的布局, <?xml version="1.0" encoding="utf-8"?> <merge xml ...
- python: hashlib 加密模块
加密模块hashlib import hashlib m=hashlib.md5() m.update(b'hello') print(m.hexdigest()) #十六进制加密 m.update( ...
- c# 反射列子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- Ramsey theorem in Combinarotics