Windbg 32位版本和64位版本的选择

习惯了Vsiual Studio的兄弟们可能会因为先入为主的原因以为所有的调试器都应该像它那样,其实不然,当你安装Debugging Tools for Windows的时候,你将发现有两个系列的工具,一系列32位的工具和一系列64位的工具。这让人觉得和费解,因为在我们安装Microsoft Visual Studio的时候你根本不需要考虑32位还是64位。

如果你正使用windbg调试工具集(WinDbg, KD, CDB, or NTSD)中的一个,你必须得自己做出选择。为了选择合适的调试工具,你需要知道以下两点:

1. 你的调试主机的处理器类型。

2. 你的调试主机运行的是32位版本的windows还是64位版本的。

 

PS:运行调试器的计算机我们成为调试主机,被调试的计算机我们称为目标机。

 

调试主机运行32位版本的windows

如果你的调试主机运行的是32位版本的windows,使用32位的调试工具(不管此时被调试的目标机是 x86-based 还是 x64-based)。

 

x64-based调试主机运行64位的windows

 

如果你的调试主机使用x64-based的处理器,并且运行64位的windows,请参考如下规则:

 

  • 如果你在分析dump文件,你可以使用32位或者64位的调试工具集。(不管dump文件是用户态的还是内核态的,也不管这个dump文件是在 x86-based 还是 x64-based的平台上抓的。)
  • 如果你在进行实时内核调试,你可以使用32位或者64位的调试工具集(不管此时被调试的目标机是 x86-based 还是 x64-based)
  • 如果你在进行实时用户态调试,并且调试器也在同一台机器上,对于64位的代码和32位的 WOW64代码都需要使用64位的调试工具集。使用 .effmach命令设置调试器的模式。
  • 如果你在实时调试32位的用户态代码,但是这些代码运行在一个单独的目标机器上,使用32位的调试工具集。
  •  
  • 总结

    只有在实时用户态调试,并且调试器也在同一台64位机器上的情况下必须用64位的调试工具集!

时间: 2024-12-28 16:17:21

Windbg 32位版本和64位版本的选择的相关文章

关于Windows32位版本与64位版本之间区别的说明

要使用 64位版本的 Windows Vista,必须满足以下面两个条件:   1.计算机必须拥有64位的处理器:   2.必须为计算机中的设备提供64位的设备驱动程序.   安装64位版本的 Windows Vista 时的注意事项   1.计算机中可能有一种或多种设备没有 64 位的设备驱动程序:   2.设备驱动程序必须经过数字签名:   3.不支持 32 位的设备驱动程序:   4.32 位的程序可能无法与 64 位的操作系统完全兼容:   5.可能难以找到专为 64 位操作系统编写的程

各版本x86 / 64位MongoDB下载地址

各版本x86 / 64位MongoDB下载地址: linux: http://dl.mongodb.org/dl/linux/x86_64 windows: http://dl.mongodb.org/dl/win32/x86_64

Win7 32位系统和64位系统有什么区别

  首先,相信选择64位Windows7的网友中很有大比例是内存大于或等于4GB的.在32位Windows7下,可能会显示内存可使用3.25G,这让很多网友感到不安.没错,可寻址的内存空间确实是32位Windows7和64位Windows7最为显著的特点. 32位的CPU(准确的说是运行在32位模式下的CPU)只能寻址最大4GB的内存,受制于此,32位的操作系统也只能识别最大4GB的内存,由于在系统中,除了内存之外,还有很多存储设备,因此,真正可以利用的内存空间肯定小于4GB,也就是我们看到的系

32位程序对64位进程的远程注入实现

本文讲的是32位程序对64位进程的远程注入实现, 0x00 前言 要对指定进程进行远程注入,通常使用Windows提供的API CreateRemoteThread创建一个远程线程,进而注入dll或是执行shellcode. 在64位系统下,该方法需要特别注意,注入的目标进程要同程序的结构保持一致,即32位程序只能对32进程作注入,64位程序只能对64位进程作注入,32位程序对64位程序进行注入时会失败(32位和64位的结构不同). 然而,在某些特殊的环境下,无法提前预知目标进程的结构,准备两个

使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表

原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表   我们知道目标平台是32位的程序运行在64位的系统上,去访问部分注册表的时候系统自动重定向到win32node节点对应的项去了.但是做过安装程序开发人员可能遇到过"需要去掉重定向"的问题,即直接访问64位程序的注册表. 网上有很多winAPI的方法,关闭注册表的重定向稍微复杂.(关闭文件系统的重定向稍微简单些,搬过来就可以用:关闭注册表的重定向我现在没看懂.) 我这里提供的方法不需要关闭重定向,也不需要

c++-开发32位程序和64位程序有什么区别?假设用C++开发

问题描述 开发32位程序和64位程序有什么区别?假设用C++开发 假设现要开发一个win程序,用C++语言,那么开发我32bit程序跟开发64bit程序有什么区别? 解决方案 你是问开发有什么不同,ok,其实google一下答案就有了. 1. 首先数据类型不一样 在32位平台整型啊,指针啊都是32位的,到64位平台就是64位了,你要注意这个区别,比如溢出. 还有一些数据结构变化了,比如time_t,你的小心. 浮点数的结构也在32和64也不太一样 2. 数据转换发生了变化,比如在32位平台做以下

Windows 7系统迁移指南——从32位过渡到64位

Windows--包括http://www.aliyun.com/zixun/aggregation/34065.html">WindowsXP,Vista,Windows 7以及该操作系统的服务器版本--已经从32位过渡到了64位.硬件制造商有足够的时间为其产品提供32/64位的驱动程序. 事实上,我们现在买到的几乎每个扫描仪,打印机,视频摄像头或其他硬件设备都能提供这两种平台的驱动.因此如果我们添置一套新设备时无需担心兼容问题.但是如果我们要将以前购买的打印机,扫描仪或摄像头进行迁移,

iOS上应用如何兼容32位系统和64位系统

      在苹果推出iPhone5S时,64位的应用就走到了眼前.当时就看见苹果官方资料宣布iOS7.x的SDK支持了64位的应用,而且内置的应用都已经是64位.       我记得自己刚刚接触电脑时还有16位的系统,指针的寻址范围还是16位的.当年用TurboC时,还要根据应用的大小选择是tiny模式还是其他.后来很长一段时间使用32位的模型编程,4G是牢牢记住的一个边界条件.而现在,64位走到了眼前.       就如同16位转向32位一样,硬件肯定是最先推出的,SDK也会跟进,然后各种第

Windows 7 32位系统和64位系统有区别是什么

选择64位Windows7系统是因为很内存大于或等于4GB的.在32位Windows7下,可能会显示内存可使用3.XXG,可寻址的内存空间是32位Windows7和64位Windows7最为显著的特点.32位的CPU(准确的说是运行在32位模式下的CPU)只能寻址最大4GB的内存,受制于此,32位的操作系统也只能识别最大4GB的内存,由于在系统中,除了内存之外,还有很多存储设备,因此,真正可以利用的内存空间肯定小于4GB,也就是我们看到的系统属性中显示的3.xxG.但64位CPU则有了很大改变,

关于32位系统和64位系统运行asp。net程序的兼容性问题。

问题描述 我现在做了一个asp.net网站,用的C#.vs2008开发环境,操作系统是windowsserver2008x32.数据库:oracle10g.运行一切正常.现在客户换了一台服务器,装windowsserver2008X64版本.不知道我的这个网站部署到64位的系统是有问题没有.如果有兼容问题,该怎么解决. 解决方案 解决方案二:如果程序是纯.NET写的,完全没有问题.如果程序使用了32bit的dll或者activex组件,那么需要把程序集编译成32bit.解决方案三:网页中有一个f