深入解析Windows操作系统(Windows Internals) 4th Edition 读书笔记 - 第一章 概念和工具(三)

来源:互联网 发布:如何评价张学良知乎 编辑:程序博客网 时间:2024/05/01 10:19

本篇内容:内核源码,内核调试,常用工具。

 

1.3   挖掘Windows内部机理

 

研究方法

书中提到本书的许多信息是通过阅读Windows源代码,以及与开发人员交谈的基础上获得的。作为读者,当然不会有这么有利的条件。但是,幸运的是,现在Windows内核的源代码已经可以通过某种途径从微软网站下载到。这一点要归功于开源运动,但同时也体现了微软的诚意。我本人的机器上就有一份Windows Research Kernel的源代码。这是一份可以编译并且可以在Windows Server 2003 SP1上实际运行的代码。在阅读有关章节时,适时地参考一下源代码,一定有事半功倍的效果。

 

这份源代码的readme.txt里,赫然发现这样的文字:

Two of the best existing sources for documentation of the NTOS kernel are

    Microsoft Windows Internals, 4th Ed 2005, Mark Russinovich and David Solomon

    The Windows Curriculum Resource Kit (CRK)

    http://www.msdnaa.net/curriculum/pfv.aspx?ID=6191

原来这本书竟然是这份内核源代码最好的文档之一,妙哉!

 

为了更好地阅读这份源代码,我使用了understand源代码阅读工具。关于undestand,参见我的另一篇文章(http://blog.csdn.net/qwang24/archive/2009/04/11/4064975.aspx)

 

除了直接阅读源代码,还可以使用很多工具来挖掘Windows内部机理。书中列出了所有用到的工具及来源,摘录一份:

Tool

Image Name

Origin

Startup Programs Viewer

AUTORUNS

http://www.sysinternals.com

Dependency Walker

DEPENDS

Support Tools, Platform SDK

DLL List

LISTDLLS

http://www.sysinternals.com

EFS Information Dumper

EFSDUMP

http://www.sysinternals.com*

File Monitor

FILEMON

http://www.sysinternals.com

Global Flags

GFLAGS

Support Tools

Handle Viewer

HANDLE

http://www.sysinternals.com

Junction tool

JUNCTION

http://www.sysinternals.com

Kernel debuggers

WINDBG, KD

Debugging tools, Platform SDK, Windows DDK

Live Kernel Debugging

LIVEKD

http://www.sysinternals.com

Logon Sessions

LOGINSESSIONS

http://www.sysinternals.com

Object Viewer

WINOBJ

http://www.sysinternals.com

Open Handles

OH

Resource kits

Page Fault Monitor

PFMON

Support Tools, Resource kits, Platform SDK

Pending File Moves

PENDMOVES

http://www.sysinternals.com

Performance tool

PERFMON.MSC

Windows built-in tool

PipeList tool

PIPELIST

http://www.sysinternals.com

Pool Monitor

POOLMON

Support Tools, Windows DDK

Process Explorer

PROCEXP

http://www.sysinternals.com

Get SID tool

PSGETSID

http://www.sysinternals.com

Process Statistics

PSTAT

Support Tools, Windows 2000 Resource kits, Platform SDK, http://www.reskit.com

Process Viewer

PVIEWER (in the Support Tools) or PVIEW (in the Platform SDK)

Platform SDK

Quick Slice

QSLICE

Windows 2000 resource kits

Registry Monitor

REGMON

http://www.sysinternals.com

Service Control

SC

Windows XP, Platform SDK, Windows 2000 resource kits

Task (Process) List

TLIST

Debugging tools

Task Manager

TASKMGR

Windows built-in tool

TDImon

TDIMON

http://www.sysinternals.com

 

 

内核调试

内核调试是探索Windows内部机理的重要方法。内核调试工具:

l         Windows调试工具箱(包括著名的WinDBG

l         LiveKD systernals.com

l         SoftIce (Compuware Numega)

实际上近年来国人编写的syser kernel debugger也是一款优秀的内核调试工具,优于SoftIce

 

Windows调试工具箱提供的内核调试有两种:命令行版本(kd.exe)和图形用户界面(GUI)版本:Windbg.exe。其命令集完全相同。它们支持三种类型的内核调试:

l         分析崩溃转储文件(即dump文件)

l         连接到一个正在运行的系统上。要示有两台计算机(目标计算机和控制主机。也可以使用虚拟机,只需一台计算机即可。)

l         连接到本地系统(Windows XPWindows Server 2003)。这种方式只能查看系统状态。

 

调试符号路径设置:

srv*c:/symbols*http://msdl.microsoft.com/download/symbols

 

Platform SDK

Platform SDK包含了编译和链接Windows应用程序需要的文档、头文件和库文件。以前一直不知道这些头文件及库文件和Visual C++带的有什么区别,书中给出了解释:Platform SDK所带的头文件符合Windows操作系统最新版,而Visual C++带的头文件只是Visual C++刚发布时的版本,可能会过时。Platform SDK提供的Windows API头文件及一些实用工具对于考察Windows内部机理有很大帮助。

 

DDK(设备驱动程序驱动开发工具)

DDK也是考察Windows内部机理的丰富的信息源。主要体现在其详细的内核函数和机制的文档、相应的头文件(定义了关键的内部数据结构和常数)、内部例程的接口定义。

 

实验

本节的实验是使用内核调试工具显示内核数据结构。主要命令:

dt nt!_* (显示所有以下划线开头的符号名)

dt nt!_*interrupt* (显示所中断对象的结构名)

dt nt!_kinterrupt (显示_kinterrupt结构)

 

以下是我自己的机器上运行的结果

lkd> dt nt!_*interrupt*

          ntoskrnl!_KINTERRUPT

          ntoskrnl!_KINTERRUPT_MODE

          ntoskrnl!_KINTERRUPT

lkd> dt nt!_kinterrupt

   +0x000 Type             : Int2B

   +0x002 Size             : Int2B

   +0x004 InterruptListEntry : _LIST_ENTRY

   +0x00c ServiceRoutine   : Ptr32     unsigned char

   +0x010 ServiceContext   : Ptr32 Void

   +0x014 SpinLock         : Uint4B

   +0x018 TickCount        : Uint4B

   +0x01c ActualLock       : Ptr32 Uint4B

   +0x020 DispatchAddress  : Ptr32     void

   +0x024 Vector           : Uint4B

   +0x028 Irql             : UChar

   +0x029 SynchronizeIrql  : UChar

   +0x02a FloatingSave     : UChar

   +0x02b Connected        : UChar

   +0x02c Number           : Char

   +0x02d ShareVector      : UChar

   +0x030 Mode             : _KINTERRUPT_MODE

   +0x034 ServiceCount     : Uint4B

   +0x038 DispatchCount    : Uint4B

   +0x03c DispatchCode     : [106] Uint4B

 

如果想看Windows Research Kernel中关于_KINTERRUPT结构的定义,使用前面提到的understand,很容易找到。它位于base/ntos/inc/ke.h中,如下图:

understand.exe

与上述内核调试工具中显示的完全一致。如果是AMD64处理器,这个结构会多三个字段。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机千牛消息不小心删除了怎么办 淘宝账号被冻结提示无法恢复怎么办 商家未发货我误点了确认收货怎么办 淘宝买货商家不发货也不退款怎么办 商家没发货点成收货了怎么办 淘宝新店上架产品未通过审核怎么办 安卓手机电池虚电怎么办_查查吧 拼多多拼单期间商家下架商品怎么办 微信绑别人的卡需要人脸认证怎么办 支付宝把钱转到了停用的账号怎么办 我注册征信账号忘记了要怎么办 客户说考虑考虑我该怎么办招商类 浴巾用久了黑黑的洗不干净怎么办 wifi密码被别人改了怎么办啊 苹果手机更新后账号密码忘了怎么办 专项预审批额度额度时效了怎么办 id密码和id码丢了怎么办 手机卡丢了id密码忘了怎么办 不想叫爱派登录我的微信怎么办 pr中素材与新建序列不匹配怎么办 淘宝客户收到货不承认要退款怎么办 淘宝包邮店铺 新疆地区拍怎么办 唯品会换货上门但自己寄了怎么办 闲鱼实名认证拍身份证不行怎么办 支付宝绑定的身份证过期了怎么办 实名认证的淘宝店铺被骗走了怎么办 移动宽带los灯亮红灯闪烁怎么办 天猫精灵方糖不支持5g怎么办 天猫精灵方糖连不上网怎么办 设置隐私相片里没什么都没有怎么办 我的手机丢了里面有隐私相片怎么办 苹果5s的id关了怎么办 用op手机快手拍视频打不开怎么办 苹果8p用流量下载不了软件怎么办 流量下载不了内存大的游戏怎么办 苹果6s开机密码忘记了怎么办 咸鱼买东西没寄买家申请退款怎么办 淘宝商品缺货又不想下架怎么办 房产代理商不给我结佣金怎么办 天猫客服遇到脾气不好的客户怎么办 美团外卖点的食品与描述不符怎么办