zoukankan      html  css  js  c++  java
  • Windows Debugging之二

    Kernel mode的debugging需要有一个目标机和一个宿主机。目标机运行着内核态的程序,宿主机内运行着debugger。

    目标机与宿主机没有必要非要使用同一系统或者同一版本的windows。

    内核态debugging不需要特定的自由版本或者检查版本(free version and checked version)的build。宿主机和目标机在free还是checked上没限制。

    默认的目标机的debug输出串口为COM2,修改变量debugport可以修改这个。

    默认的宿主机的输入串口为COM1. 修改_NT_DEBUG_PORT可以修改这个。

    Ready目标机

    若要让目标机允许内核态的debugging,要修改boot.ini文件,给它添加一个/debug选项。boot.ini一般在C盘根目录下可以找到。如果你使用的是Windows XP,那么请参考http://support.microsoft.com/kb/289022/zh-cn 来寻找修改boot.ini的方式。

    一个例子:

    [boot loader]

    timeout=30

    default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

    [operating systems]

    multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect /MAXMEM=512 /DEBUGPORT=COM1 /BAUDRATE=115200

    当Windows无法启动,你没有机会编辑boot.ini时,你可以开机时按F8,采用安全模式启动Windows。安全模式只在启动时加载最少的必要驱动和最少的系统设备,如果启动成功,你就可以编辑boot.ini了。

    如果启动分区被格式化为FAT,那么你可以使用MS-dos,然后编辑boot.ini. 由于boot.ini是隐藏的,在dos中可以使用如下的命令来看到它:dir /ah.

    可以使用如下的命令来去掉它的隐藏和只读属性。attrib –r –s –h boot.ini

    Ready宿主机

    要开始内核态或用户态的debugging,宿主机必须安装所有必要的symbol文件,还要设置一些环境变量。

    如下的批处理文件可以帮助你快速设置一些环境变量。

    SET _NT_SYMBOL_PATH=z:\symbols\winnt\2195\symbols

    SET _NT_ALT_SYMBOL_PATH=z:\symbols\winnt\2195sp1\symbols

    SET _NT_DEBUG_PORT=COM1

    SET _NT_DEBUG_BAUD_RATE=115211

    SET _NT_LOG_FILE_OPEN=z:\debug\debug.log

    z:\debug\kd.exe -v -n

    Symbol文件

    Symbol文件保存有各种在运行二进制文件时用不着的信息,这些信息在debugging的时候才比较有用。典型的,Symbol文件中包含有

    1. 全局变量

    2. 局部变量

    3. 函数名和他们的入口地址

    4. FPO数据

    5. 源代码行号

    不管是交互式的debugging还是分析crash dump文件,都需要symbol文件,debugger需要加载它们。

    注意:宿主机上安装的symbol文件应该和目标机上安装的windows版本相匹配。

  • 相关阅读:
    (hdu step 7.1.2)You can Solve a Geometry Problem too(乞讨n条线段,相交两者之间的段数)
    阅读<反欺骗的艺术>思考
    顺序查找(改进)
    win7电脑那些事
    激活office 2010
    MyEclipse10安装SVN插件
    合并排序法
    希尔排序法
    直接插入排序法
    快速排序法——较优方法
  • 原文地址:https://www.cnblogs.com/awpatp/p/1592640.html
Copyright © 2011-2022 走看看