内核符号表

http://blog.csdn.net/vbsourcecode/article/details/8555796

在进行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=DRIV

ERSOURCES=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内核安全编程》一书,结合自己的实际应用进行整理所得
========

关于内核符号表

windows的symbol内核符号表貌似挺多,要下哪一个?求指导

貌似是分 32位、64位的。

分系统的。看你的系统是xp,win7。下的不一样。除此之外还有32位,64位之分。
其实用符号的地方都可以自动从网络上下的比如windbg配置好就行了。

windows内核符号表的版本该怎么选择

都说在用双机调试驱动的时候要下载windows的内核符号表。于是我就去官网看了下发现。都是预览版的

符号表还有RT版的!有点迷惑了!我用的是企业版!不知道该下载哪个!
========

Windows内核符号表下载

http://blog.csdn.net/taobao755624068/article/details/7751030

目录(?)[-]
Windows内核开发调试环境配置详解

在进行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中,并与编译好的驱动的目录放在一起用分号隔开。

1. 下载和使用WDK

应用程序使用开发包SDK,类似的,内核编程使用"Windows Driver Kit",简称WDK。WDK已经自带所有需

要的头文件、库、C/C++语言及汇编语言的编译器和链接器

如何获取WDK
参见
http://msdn.microsoft.com/zh-cn/windows/hardware/gg487463

安装注意:
尽量安装到相对简单路径,避免特殊情况配置路径时麻烦以及可能出现的编译问题
选择“完全安装”

2.编写第一个内核模块
=============================
#include <ntddk.h>

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
#endif

DbgPrint("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=first
TARGETTYPE=DRIVER
SOURCES=first.c
===============================

开始->程序->Windows Driver Kits-> WDK XXXX.XXXX ->Build Enviroments ->Windows XP ->Launch

Windows XP x86 Checked Build Enviroment

编译即得到first.sys

4. Vmware创建一个新的虚拟机,并安装WindowsXP SP3系统
步骤在此不再详述,可搜索相关帖子
记得安装Vmware tools, 以方便虚拟机内外共享文件

5. 在虚拟机中下载并安装srvinstw
srvinstw即services installation for windows
搜索下载,参考
http://www.onlinedown.net/soft/36059.htm

a. 将刚刚编译生成的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. 在调试机(宿主机)安装WinDbg
WinDbg下载地址参考:
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

8. 设置Windows XP调试执行
显示所有文件,不隐藏系统保护的文件后
在系统盘下打开并修改boot.ini文件

内容通常为:
============================
[boot loader]
timeout=0
default=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=115200

9. 设置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
#endif

int 3是一句汇编指令,执行到此程序会中断;若不是调试状态执行则会直接蓝屏
加上宏DBG测试以保证只有调试版本该语句才会被编译

在虚拟机中运行net start first, 则会看到弹出断点

此时可以打开Watch窗口观察和修改变量了

本文是根据谭文《Windows内核安全编程》一书,结合自己的实际应用进行整理所得
========

设置Windows内核符号表

http://book.51cto.com/art/200905/125736.htm
现在虚拟机里的操作系统进入了调试模式,那么怎样调试之前编译的first呢?实际上,没有必要告诉

WinDbg需要调试的是first,WinDbg把内核视为一个整体,我们只要告诉它代码的路径和符号表的路径就

可以了。

在调试连接上之后,打开WinDbg的主菜单“File”下的“Symbol File Path”,在这里输入符号表位置

。符号表和sys产生在同一个目录下,所以只要指定本机上编译结果所在的objchk_wxp_x86\i386目录就

可以了。

如果有多个驱动需要调试,那么可以指定多个路径,路径之间用分号分隔。

此外,需要指定Windows的内核符号表。Windows的每一个sys文件都有自己的符号表,这些符号表需要从

网上下载,但是没有必要自己去下载。可以在Symbol File Path中增加如下一条设置,用分号与其他路

径隔开:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols
这条设置使WinDbg自动用HTTP协议从微软的网站上下载所需要的符号表。首次使用会使WinDbg变得极慢

,接近死机,但是没有关系,实际上,WinDbg正在下载符号表,可以打开c:\symbols查看,这个路径也

可以指定为其他的位置。

请注意下载并不一定总是成功。如果发现符号表并没有下载下来,请多试几次。笔者有时也是多次才成

功。

下载完成后执行就很快了。读者可以在调试过程中看见微软提供的所有的函数名,也可以随时查看调用

栈。

如果调试时总是看不见可懂的函数名,这是符号表设置问题,请正确设置参数并保持网络畅通。

下面是用WinDbg开始调试虚拟机的情形,如图1-10所示。
========

Windows内核符号表学习总结相关推荐

  1. Windows内核的表学习总结

    SSDT - 系统服务描述符表 SSDT(System Services Descriptor Table),系统服务描述符表.这个表就是一个把ring3的Win32 API和ring0的内核函数联系 ...

  2. 寒江独钓windows 内核安全编程学习笔记

    寒江独钓windows 内核安全编程学习笔记 本博客记录自己的学习过程,如有侵犯或者打扰请告知. 由于项目的需求,第一次接触到驱动程序.开始学习了寒江大神的的内核安全编程.小白一个,第一章就遇到了问题 ...

  3. Linux驱动开发(二)内核符号表

    内核符号表是内核中一个全局的总表,这个表中声明了一些全局的函数.内核中的驱动程序只需要用 extern 声明后就可以直接调用这些函数了. 查看内核中的符号表: cat /proc/kallsyms 将 ...

  4. Linux内核符号表

    一,什么是符号(Symbols)?     什么是Symbol?  其实就是kernel中的变量(Variable Name)或函数名称(Function Name),     这样可以方便程序员在写 ...

  5. Windows MSVC 符号表(.lib文件)(C++符号表解析)(符号表是如何产生的)(第四步:链接)

    核心思想: 由于不同的编译器采用不同的名字修饰方法,必然会导致由不同编译器编译产生的目标文件无法正常相互链接,这是导致不同编译器之间不能互操作的主要原因之一. 符号表的由来以及C++符号表解析 win ...

  6. Windows内核HAL相关学习

    1 硬件抽象层HAL 硬件抽象层是系统可移植的关键.HAL是一个可加载的,内模式模块提供了windows当前运行平台的低层接口.它隐藏了与 硬件相关的细节,如I/O接口,中断控制器,以及多处理器通信机 ...

  7. 深度linux 内核符号表,linux 内核符号表

    linux: 偏旁符号 偏旁部首名称表 偏旁部首怎么打,缺失:linux内核表3345/9 偏旁部首大全 部首笔画数 1 划: 亅 乛 一 乙 乚 丶 部首笔画数 2 划: 二 十 八 讠 刂 力 儿 ...

  8. sylixos 将函数添加到内核符号表中及使用

    最近有客户问我怎么在应用层调用自己在bsp 中写的驱动函数,这边我建议他使用: API_SymbolAdd(CPCHAR pcName, caddr_t pcAddr, INT iFlag); 函数 ...

  9. 寒江独钓:Windows内核安全编程(china-pub到货首发)

    寒江独钓:Windows内核安全编程(china-pub到货首发) [作 者]谭文;杨潇;邵坚磊等 [丛 书 名] 驱网核心技术丛书  [出 版 社] 电子工业出版社     [书 号] 978712 ...

最新文章

  1. Drupal7 将到2021年11月结束支持,请注意升级
  2. C++中的vector使用范例-
  3. 【BZOJ4820】[SDOI2017]硬币游戏(高斯消元)
  4. ionic overflow:auto失效
  5. Spring boot应用如何支持https
  6. 微信接口请求次数_接口签名验证常用方案
  7. c#sql防注入模糊查询_SQL中利用LIKE实现模糊查询的功能
  8. MTK和高通展讯他们平台的主要区别是什么
  9. “方法X对于类型Y是模糊的” Java模糊方法调用null错误
  10. 图灵奖抬不起Algorand |链捕手
  11. html实现百度换肤,案例实战(二):百度脑图网站换肤
  12. 我精心整理的 136 页 Excel 数据透视表 PDF 文件!【附获取方式】
  13. oracle- 同义词
  14. 【RTX51 Tiny初级】09_K_TMO与K_IVL的区别和使用场合
  15. c语言自动填表chrome网页,教你设置Chrome浏览器里的自动填表功能
  16. Pymc 包(贝叶斯模型 python工具):(1)安装版本提示
  17. Python pandas 计算行/列数据之和
  18. 面对流氓软件,是逃避还是反击?(连载二、一场口水引发的战争)
  19. python定义定长数组_python 初始化一个定长的数组实例
  20. (六)《数电》——二极管与CMOS门电路(入门)

热门文章

  1. ServletContext 对象
  2. sql like语句中的通配符:百分号、下划线和escape
  3. linux下oracle数据库由于参数文件丢失导致的数据库服务启动失败,报“failure in processing system parameters“错误问题解决
  4. Linux 技术篇-查看cpu核心数,grep常用信息筛选语法使用演示
  5. PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
  6. BAT 批处理命令 - 解决cmd控制台中文乱码问题实例演示
  7. chrome 插件安装:无法添加来自此网站的应用,解决办法。安装本地crx插件方法
  8. CTFshow 命令执行 web124
  9. 计算机技术停滞,究竟什么原因让科技停滞不前呢?
  10. 自定义模板类(循环队列)