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

1、如果你的调试主机运行的是32位版本的windows,使用32位的调试工具(不管此时被调试的目标机是 x86-based 还是 x64-based)。
x64-based调试主机运行64位的windows
2、如果你的调试主机使用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位的调试工具集!

如何分辨是x64的还是X86的:程序本身应该是x86还是x64的,应该预先就知道的,如果程序本身是x86的,在debugger break时出现了很多wow64cpu等类似的dll时,就表明它是在x64模式的,应该使用 !wow64exts.sw 切换模式。

三、x64切换机器类型

一般是用  !wow64exts 扩展切换机器类型。

!wow64exts.sw
Switches between x86 and native mode.
!wow64exts.k count
Dumps a combined 32-bit/64-bit stack trace. If count is specified, the command dumps the first count addresses in each stack trace.
!wow64exts.info
Dumps basic information about the PEB of the process, the TEB of the current thread, and thread local storage (TLS) slots used by WOW64.
!wow64exts.r address
Dumps context for the specified address. If address is not specified, the command dumps context for the processor.


在没有扩展的情况下,用内置命令 .effmach 
.effmach  (Effective Machine)
The .effmachcommand displays or changes the processor mode that the  debugger uses.
Syntax
.effmach [MachineType] 

.x86 Use an x86-based processor mode
.amd64 Use an x64-based processor mode
.ia64 Use an Itanium-based processor mode
.ebc Use an EFI byte code processor mode


The processor mode influences many debugger features: 
Which processor is used for stack tracing. 
Whether the process uses 32-bit or 64-bit pointers. 
Which processor's register set is active. 



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值