参考资料:

1. 《Windows Internals》

2. Windows Drive Kit

3. Microsoft Windows SDK

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学习笔记(一)概念与工具的更多相关文章

  1. Windows Internals学习笔记(八)IO系统

    参考资料: 1. <Windows Internals> 知识点: ● 当一个进

  2. Windows Internals学习笔记(七)Image Loader

    参考资料: 1. <Windows Internals> 2. Fibers 知识点: ● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务.然而, ...

  3. Windows Internals学习笔记(六)Windows关键系统组件

    参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...

  4. Windows Internals学习笔记(五)Synchronization

    参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...

  5. Windows Internals学习笔记(四)Trap Dispatching

    参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...

  6. Windows Internals学习笔记(二)系统架构

    参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...

  7. Windows Internals学习笔记(三)Procdump的使用

    参考资料: 1. 下载地址 2. 使用示例

  8. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  9. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

随机推荐

  1. XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化

    XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化 我们现在用的就是典型的XP+devOps模式,已经放弃scrum了 现在还很多公司弄docker虚拟化docker非常复杂,当然 ...

  2. Hibernate,Session清理缓存时间点

    当应用程序调用org.hibernate.Transaction的commit()的时候,commit()方法先清理缓存,然后再向数据库提交事务. 当应用程序显示调用Session.flush()方法 ...

  3. BZOJ 1036:树的统计Count(树链剖分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1036 题意:中文题意. 思路:也是普通的树链剖分.唯一注意的点是在change函数中 while(t ...

  4. hashcode与equals

    归纳一下就是hashCode是用于查找使用的,而equals是用于比较两个对象的是否相等的.以下这段话是从别人帖子回复拷贝过来的: .hashcode是用来查找的,如果你学过数据结构就应该知道,在查找 ...

  5. recyclview多条目布局

    多条目基础 http://blog.csdn.net/fangchao3652/article/details/43148871 添加底部加载更多 http://blog.csdn.net/fangc ...

  6. CI框架分页类

    分页类1.分页类参数说明 'base_url' => 指向你的分页所在的控制器类/方法的完整的 URL, 'total_rows' => 数据的总行数, 'per_page' => ...

  7. 八大排序算法之四选择排序—堆排序(Heap Sort)

    堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...

  8. jQuery 禁用退格键

    在只读区域按退格键会造成页面后退,禁用退格键可以这样做: $(document).bind("keydown", function(e){ if(e.keyCode == 8){/ ...

  9. SQL Server 索引和表体系结构(二)

    转自:http://www.cnblogs.com/chenmh 非聚集索引 概述 对于非聚集索引,涉及的信息要比聚集索引更多一些,由于整个篇幅比较大涉及接下来的要写的“包含列的索引”,“索引碎片”等 ...

  10. mysql一些常用命令总结

    mysql时间戳转日期格式SELECT FROM_UNIXTIME(add_time,'%Y-%m-%d %H:%i:%s') FROM `wh5_username` where id=23; 按in ...