【发布时间】:2017-09-04 15:35:59
【问题描述】:
是否有 Windbg/NTSD 命令告诉我在实时调试会话中附加的进程是 32 位还是 64 位?
你能告诉我两个吗:
- 非托管进程?
和
- 托管的?
对于托管的,我可以在 C# 中以编程方式找到它,但我仍然想知道是否有 Windbg 命令。
更新
我正在调试的目标进程是 Microsoft Word (winword.exe)。 Office 版本是 2016,但我不确定它是 32 位还是 64 位二进制文件。以下是一些观察:
目标位置是C:\Program Files (x86)\Microsoft Office\root\Office16\WinWord.exe
管道 (
|) 命令只告诉我 PID、进程是否附加到调试器以及加载图像的路径(如上面 #1 所述)。我在 64 位机器上调试它。因此,r 显示 64 位寄存器。
在附加到一个没有崩溃的实时、健康的进程(我刚刚打开 MS Word 并说“附加到进程”)时,当前线程 (
k) 的调用堆栈读取顶部为wow64cpu!CpupSyscallStub+0x9- 大多数电话。这与 #1 表明该进程是 32 位进程。
已经尝试过的命令
- !peb(进程环境块):告诉我们处理器架构,而不是被调试进程的位数。
- |
- 垂直目标
- r(表示我的处理器的寄存器大小,不告诉我进程)
但我想知道是否有办法找出答案。
【问题讨论】:
-
任何与
k相关的东西都可以给你显示方法地址,指示指针大小和清楚的进程位数。 -
这不是告诉我们处理器的位数而不是进程的位数吗?只是问问而已。没有挑战性。
-
Vertarget 应该这样做
-
在发布这个问题之前,我已经尝试过
vertarget。我可能是错的,但vertarget告诉我们其他一切,如环境变量、进程和系统正常运行时间、命令行参数及其值。它没有告诉我们当前进程的进程架构。如果我错了,我希望得到纠正。