一句话总结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-11-08 22:35:12

一句话总结Windbg 32位版本和64位版本的选择的相关文章

Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储

在VS2013中调试Silverlight项目时,提示:无法附加.Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储.请改用64位版本. 解决方法很简单: 把调试按钮的调试程序Internet Explorer改成Internet Explorer2,就可以了.

C# 32位程序在64位系统下注册表操作

在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与64位程序冲突 相关资料请查看32位程序在64位系统下运行的重定向机制 下面是以获取操作系统安装密匙KEY的案例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using

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

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

32位工程到64位迁移

最近小组,提出一个蛋疼的要求,要把32位的工程转成64位,并且要产生 debug x86, debug x64, release x86 release x64 这4个版本,并且不需要anycpu 经过几天的摸索,发现 对于 第三方的 c++等dll 很好处理, 直接复制,覆盖过去就可以了, 但是 c#自身的我们通过using的dll由于会产生信息记录,所以不行 不过对于c#32位的dll,64位程序实际上是可以直接调用的,于是无关太大的影响. 下面开始迁移之旅 首先建立一个测试工程 然后设置e

实战iOS应用从32位升级到64位

苹果官方会在2015年2月1日不允许不支持arm64的应用的提交,这对我们这种开发移动应用产品的人来说是一把达摩克利斯之剑.我前面写过一篇文章<iOS上应用如何兼容32位系统和64位系统>,但那还是纸上谈兵阶段,没有进入实战.到2015年1月份,我终于在应用提交了一次新的稳定版本后,开始进行应用的arm64升级. 1. 准备 我们的应用是多媒体的播放器,牵涉到了ffmpeg/SDL等著名的开源第三方.因为项目中并非把这些项目的源码直接引入,而是通过打库链接到项目的方式来使用,那么所有的第三方的

32位程序下调用64位函数——进程32位模式与64位模式切换

之前学习的32位进程中调用64位进程函数的知识整理一下,也就是32位模式与64位模式之间的切换. 相关博客:http://www.cnblogs.com/lanrenxinxin/p/4821152.html 这个博客中提到了github上的开源库,我在另一份开源项目中也看到了个库,可以切换32位至64位. 如果对这个功能具体实现比较感兴趣的朋友可以看看下面的内容. 我阅读了源码并进行了注释,算是对这个具体方法的分析和学习. 关键: 1.在x64下的进程,不管是32位或者是64位,实际上都映射了

32位程序移植64位经验

最近移植了一个32位程序到64位,原本以为简单的事,折腾了好几天,现在记录下来过程,供有相关问题的人参考:程序是一个输入法,源代码来自盒子 http://www.2ccc.com/article.asp?articleid=2850,再此感谢刘麻子大侠,输入法大量的使用了windows定义的结构体或记录类型,涉及的数据类型很多,在32到64转换的过程中参考了http://blog.csdn.net/hpjx1987/article/details/51453586,首先感谢作者共享知识,但这里有

关于32位程序在64位系统下运行中需要注意的重定向问题(有图,很清楚)

0x00 前言 最近学习了[email protected]的文章<Persistence Architecture Matters>,恰巧解决了我之前遇到过的一个问题,理清了文件和注册表重定向中需要注意的细节 大家在学习的过程中难免也会碰到,所以在此分享一下. <Persistence Architecture Matters>的链接:https://labs.mwrinfosecurity.com/blog/persistence-architecture-matters/ 0

32位程序在64位系统上获取系统安装时间(要使用KEY_WOW64_64KEY标记)

众所周知,取系统的安装时间可取注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion的子项InstallDate,此值是个DWORD类型的UnixStamp.  但是在64位系统上有所不同(仅测试了win7.win8),默认情况下32程序在64位机器上访问的是下面这个地址HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion

32位机和64位机的区别及基本数据类型占字节数

一)64位系统和32位有什么区别? 1.64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存 2.64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍.但这是建立在64bit操作系统,64bit软件的基础上的. 什么是64位处理器? 之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2的倍数.8位处理器.16位处理器.32位处理器和64位处理器,其计数都是2的倍数.一次处理的数据越大,该电