导航

Windows Internals 6th chap1

Posted on 2013-12-01 00:02  littledot  阅读(254)  评论(0编辑  收藏  举报

Page 1 Win7 (32/64位) & Win2K8 R2(只有64位) 版本号 6.1 (Build 7600),大版本和vista相同是出于兼容性考虑。

Page 5 每个进程都保留有父进程id,由此可以建立进程树。但如果某个父进程已经结束,则链表断裂,无法回溯。此外,由于进程id会重用,单独看进程id去确定父子关系不可靠。ProcExp的做法是考虑父进程的创建时间来避免建立错误的父子关系。任务管理器是怎么做的?

Page 8 关于任务管理器的“应用”页面:该页面列出了当前用户的Interactive windows station上的所有desktop上的top-level可见窗口(the Applications tab lists the top-level visible windows on all the desktops in the interactive windows station you are connected to), "状态"列表示窗口所属线程是否处于等待windows消息状态。“Running”表示正在等待windows input,“Not responding”表示线程正在运行,等待I/O,或者其它同步对象。

Page 12 进程id和线程id都从同一名字空间产生,两者之间不会重叠

线程是windows上的调度单元,主要包括以下几个部分:

1)CPU寄存器的内容,表示当前处理器的状态

2)内核栈和用户栈

3)TLS

上面三部分又称为线程的Context (可由GetThreadContext获得,CONTEXT和处理器结构密切相关)

Page 13 64位系统上的32位进程运行于wow64上,因此同时有32位和64位context,同时也有两个用户栈。32位context可由Wow64GetThreadContext获得

Page 15 32位系统上increaseuserva选项可以用户增大用户态地址空间的大小

Page 16 AWE可以使32位程序最多访问64G的物理内存,缺点是程序员需要管理虚拟内存到物理内存的映射

Page 17 x86/x64支持4种处理器模式,windows只使用两种

内核态所有代码共享地址空间。第三方驱动运行于内核态因此可访问所有操作系统数据,风险是有可能破坏系统的安全,造成不稳定,加载第三方驱动时需特别小心。

在32位系统上当安装没有数字签名的驱动时会警告用户,在64位系统上Kernel Mode Code Signing (KMCS) 要求所有驱动必须由major code certification authorities所颁发的证书签名,不然无法加载(32位系统上因为需考虑兼容性无法作此强制性要求)。

Page 21 一个内核对象是静态定义的对象类型(object type)的实例。对象类型包括对象的属性和操作属性的函数。这有点类似于面向对象语言中类和对象的关系。

Page 23 windows主要有三种访问控制机制

1)自主访问控制

对象所有者决定允许/拒绝谁访问该资源,有ACL表示

当用户(Token)试图访问该资源时,内核根据ACL来允许/拒绝该请求

2)Previleged访问控制

保证当对象所有者不在时也能访问该资源

3)Madantory Integrity Control

PMIE/UAC

Page 24 用ANSI版本有性能损失,native是Unicode

Page 28 可以用windbg的local kernel debugging来检查本地系统状态,前提是目标系统必须以调试模式启动。lkd是某些命令不可用,比如.dump,所有不能转存当前系统状态以供后续研究。

Page 31 LiveKd可以在系统没有以调试模式启动时检查系统状态(强大啊!某些情况下及其有用),LiveKd默认用kd.exe,-w选项可以用windbg。

LiveKd的原理是simulate一个crash dump(通过加载文件系统驱动驱动,把系统以dump的文件的形式呈现给windbg,详见:I realized that I could fool the debuggers into thinking that they were looking at a crash dump file by implementing a file system filter driver that presented a “virtual” crash dump file debuggers could open. Since a crash dump file is simply a file header followed by the contents of physical memory, the driver could satisfy reads of the virtual dump file with the contents of physical memory, which the driver could easily read from the \Device\Physical Memory section object the memory manager creates.http://blogs.technet.com/b/markrussinovich/archive/2010/10/14/3360991.aspx)。需要注意的是某些情况下产生simulated dump时内核可能处于不一致状态,这时可以退出refresh snapshot。