内核符号表

在进行Windows Driver开发调试中,内核符号表是个问题。由于网络不稳定,利用windbg下载不了,在WDK的documentation中查找到下载然后本地运用的地址,贴上来:http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx在里面选择所需要调试系统版本的内核符号表,下载即可。附上原有的方法:将 srv*c:\symbols*http://msdl.microsoft.com/download/symbols 添加到windbg的Sysmbol File path中,并与编译好的驱动的目录放在一起用分号隔开。 Windows内核开发调试环境配置详解分类: Windows内核2011-08-31 16:27 360人阅读 评论(0) 收藏 举报1. 下载和使用WDK应用程序使用开发包SDK,类似的,内核编程使用"Windows Driver Kit",简称WDK。WDK已经自带所有需要的头文件、库、C/C++语言及汇编语言的编译器和链接器如何获取WDK参见http://msdn.microsoft.com/zh-cn/windows/hardware/gg487463安装注意:尽量安装到相对简单路径,避免特殊情况配置路径时麻烦以及可能出现的编译问题选择“完全安装”2.编写第一个内核模块=============================#include VOID DriverUnload(PDRIVER_OBJECT driver){ DbgPrint("first: Our driver is unloading...\r\n");}NTSTATUS DriverEntry (PDRIVER_OBJECT driver, PUNICODE_STRING reg_path){#if DBG _asm int 3#endifDbgPrint("first: Hello Windows kernel!!");driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;}==============================以上是一个最简单的示例程序DriverEntry是每个内核模块的入口,在加载这个模块时被系统进程System调用一次。3.编译该内核模块在first.c相同工程目录下增加两个文件:makefile和sources内容分别为:makefile==============================############################################################################### Copyright (C) Microsoft Corporation 1995# All Rights Reserved.# # MAKEFILE for WDM device driver kit################################################################################ DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source# file to this component. This file merely indirects to the real make file# that is shared by all the driver components of the Windows NT DDK#!if "$(WIN2K_DDKBUILD)" == ""!INCLUDE $(NTMAKEENV)\makefile.def!endif===============================sources===============================# ##############################################################Copyright (c) 2000 Microsoft Corporation##Date:# 19-Jul-2000##Module Name:# sources.##Abstract:# This file specifies the target component being built and the list of# sources files needed to build that component. Also specifies optional# compiler switches and libraries that are unique for the component being# built.## This directory builds# WIA Sample Camera Driver## ############################################################TARGETNAME=firstTARGETTYPE=DRIVERSOURCES=first.c===============================开始->程序->Windows Driver Kits-> WDK XXXX.XXXX ->Build Enviroments ->Windows XP ->Launch Windows XP x86 Checked Build Enviroment编译即得到first.sys4. Vmware创建一个新的虚拟机,并安装WindowsXP SP3系统步骤在此不再详述,可搜索相关帖子记得安装Vmware tools, 以方便虚拟机内外共享文件5. 在虚拟机中下载并安装srvinstwsrvinstw即services installation for windows搜索下载,参考http://www.onlinedown.net/soft/36059.htma. 将刚刚编译生成的first.sys拖入虚拟机b. 安装服务->本地计算机->输入不与已存在服务重名的服务名c. 手动输入sys文件的路径d. 选择“设备驱动”e. 选择启动类型为手动6. 运行与查看输出信息至此内核模块已经可以运行了,可以通过net start first / net stop first来启动和停止该服务内核模块的输出可以在WinDbg中查看;也可以直接用DbgView.exe来查看输出去微软的网站上下载DebugView.exe,参考地址http://technet.microsoft.com/zh-cn/sysinternals/bb896647(en-us).aspx DebugView需要在Capture菜单中将Capture Kernel勾上再次启动/停止服务,就可以在DbgView中看到输出了7. 在调试机(宿主机)安装WinDbgWinDbg下载地址参考:http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx8. 设置Windows XP调试执行显示所有文件,不隐藏系统保护的文件后在系统盘下打开并修改boot.ini文件内容通常为:============================[boot loader]timeout=0default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect============================最后一行复制一下,并加上新的参数使之以调试方法启动multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=1152009. 设置VMWare的管道虚拟串口调试机应与被调试机以串口相连,若被调试机是虚拟机,可以在虚拟机上生成一个用管道虚拟的串口打开虚拟机,不要启动->左边Commands栏->Edit virtual machine settings->Hardware->Add在Add Hardware Wizard中,类型选择"Serial Port"选择"Output to named pipe"接下来分别选择"\\.\pipe\com_1"和"This end is the server"以及"The other end is an application."完成即可10. WinDbg的启动参数在调试机上加上如下参数启动WinDbg,使之连接一个管道,并把这个管道当作一个串口来处理windbg.exe -b -k com:port=\\.=pipe\com_1,baud=115200,pipe在控制台执行此命令或者在windbg.exe的快捷方式属性中“目标”中增加上述启动参数先打开虚拟机,启动到调试模式下的Windows,然后启动WinDbg,显示已连接上的信息就表示成功了刚连接上时虚拟机里的系统会被中断,这时要在WinDbg的命令提示符“kd>”后输入“g”并回车11. 设置Windows的内核符号表WindDbg把内核视为一个整体,只要告诉它代码的路径和符号表的路径就可以了调试连接上之后,File->Symbol File Path, 输入符号表位置,指定编译结果所在的objchk_wxp_x86\i386即可还需要指定Windows的内核符号表,在上文的符号表路径中增加一条路径,与之前的用分号隔开:srv*c:\symbols*http://msdl.microsoft.com/download/symbols可打开C:\symbols查看是否将符号表下下来;若没有,多Reload几次12. 调试first源码中#if DBG _asm int 3#endifint 3是一句汇编指令,执行到此程序会中断;若不是调试状态执行则会直接蓝屏加上宏DBG测试以保证只有调试版本该语句才会被编译在虚拟机中运行net start first, 则会看到弹出断点此时可以打开Watch窗口观察和修改变量了本文是根据谭文《Windows内核安全编程》一书,结合自己的实际应用进行整理所得
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值