WinDbg 可以连接到远程 运行 的调试对象的标准输入吗
can WinDbg connect to stdin of a debuggee which is running remotely
我很难使用 WinDbg 来控制我的应用程序,我已经发布了我的问题 here 并放弃了这种方法,因为我无法找到实现它的方法。
现在我正在研究在命中断点后的方法,我想分支我的应用程序执行并提示来自 运行 调试器的用户的输入。
DWORD dwRand = 0;
volatile bool bDebug = false;
if (!bDebug)
{
dwRand = Rand(minValue, maxValue);
}
else
{
cout << "\n Enter dwRand: ";
cin >> dwRand;
}
return dwRand;
所以我的想法是设置 bDebug
并从用户那里获取输入,这样我就可以继续执行其他线程并等待用户输入。
我发现这些链接 1 2 3 正在解释该技术,但我想附加到一个已经远程 运行 的进程。我尝试使用 WinDbg 命令选项,但结果证明这不是我的解决方案。有人可以建议我如何实现这一目标。
上面的伪代码没有表达您的意图。
我不确定为什么您需要内核调试连接来远程调试可执行文件(在您的查询中引用 link)
如果您想在远程机器上调试可执行文件 运行,您可以连接到远程机器以使用远程调试连接会话。
下面列举的示例设置使用远程调试会话
在远程机器中调试calc.exe运行
主机----------------物理机xp sp3 32位
target----------------虚拟机xp sp3 32位
网络----------------环回适配器
C:\>net view | grep -i xp & echo kd wont connect target not booted with /DEBUG
\XPSP3VM
kd wont connect target not booted with /DEBUG
C:\>kd -k com:pipe,port=\.\pipe\debugPipe,resets=0,reconnect
Opened \.\pipe\debugPipe
Waiting to reconnect...
^B <---------force exit
"lets run windbg -server npipe:pipe=\.\pipe\debugPipe -v calc.exe
in the target machine and connect to it with cdb -server:xxxx from host
C:\>cdb -remote npipe:server=xpsp3vm,pipe=\.\pipe\debugPipe
Connected to server with 'npipe:server=xpsp3vm,pipe=\.\pipe\debugPipe'
CommandLine: calc.exe (mapped shared folder in host)
Symbol search path is: srv*z:\*http://msdl.microsoft.com/download/symbols
7c90120e cc int 3
\Admin (npipe \.\pipe\debugPipe) connected at Wed Jul 22 11:49:41 2015
0:000> .echo "yay we are remote debucking now"
yay we are remote debucking now
0:000> lm m calc*
start end module name
01000000 0101f000 calc (deferred)
.clients
\Admin (npipe \.\pipe\debugPipe), last active Wed Jul 22 11:54:19 2015
HostMachine\HostUser, last active Wed Jul 22 11:44:06 2015
0:000> kb
ChildEBP RetAddr Args to Child
0007fb1c 7c9402ed 7ffde000 7ffdf000 00000000 ntdll!DbgBreakPoint
0007fc94 7c91fad7 0007fd30 7c900000 0007fce0 ntdll!LdrpInitializeProcess+0x1014
0007fd1c 7c90e457 0007fd30 7c900000 00000000 ntdll!_LdrpInitialize+0x183
00000000 00000000 00000000 00000000 00000000 ntdll!KiUserApcDispatcher+0x7
0:000> .echo "only echo is echoed all other aw are dumped here"
only echo is echoed all other aw are dumped here
添加了屏幕截图以防所写内容听起来乱七八糟
我很难使用 WinDbg 来控制我的应用程序,我已经发布了我的问题 here 并放弃了这种方法,因为我无法找到实现它的方法。 现在我正在研究在命中断点后的方法,我想分支我的应用程序执行并提示来自 运行 调试器的用户的输入。
DWORD dwRand = 0;
volatile bool bDebug = false;
if (!bDebug)
{
dwRand = Rand(minValue, maxValue);
}
else
{
cout << "\n Enter dwRand: ";
cin >> dwRand;
}
return dwRand;
所以我的想法是设置 bDebug
并从用户那里获取输入,这样我就可以继续执行其他线程并等待用户输入。
我发现这些链接 1 2 3 正在解释该技术,但我想附加到一个已经远程 运行 的进程。我尝试使用 WinDbg 命令选项,但结果证明这不是我的解决方案。有人可以建议我如何实现这一目标。
上面的伪代码没有表达您的意图。
我不确定为什么您需要内核调试连接来远程调试可执行文件(在您的查询中引用 link)
如果您想在远程机器上调试可执行文件 运行,您可以连接到远程机器以使用远程调试连接会话。
下面列举的示例设置使用远程调试会话
在远程机器中调试calc.exe运行主机----------------物理机xp sp3 32位
target----------------虚拟机xp sp3 32位
网络----------------环回适配器
C:\>net view | grep -i xp & echo kd wont connect target not booted with /DEBUG
\XPSP3VM
kd wont connect target not booted with /DEBUG
C:\>kd -k com:pipe,port=\.\pipe\debugPipe,resets=0,reconnect
Opened \.\pipe\debugPipe
Waiting to reconnect...
^B <---------force exit
"lets run windbg -server npipe:pipe=\.\pipe\debugPipe -v calc.exe
in the target machine and connect to it with cdb -server:xxxx from host
C:\>cdb -remote npipe:server=xpsp3vm,pipe=\.\pipe\debugPipe
Connected to server with 'npipe:server=xpsp3vm,pipe=\.\pipe\debugPipe'
CommandLine: calc.exe (mapped shared folder in host)
Symbol search path is: srv*z:\*http://msdl.microsoft.com/download/symbols
7c90120e cc int 3
\Admin (npipe \.\pipe\debugPipe) connected at Wed Jul 22 11:49:41 2015
0:000> .echo "yay we are remote debucking now"
yay we are remote debucking now
0:000> lm m calc*
start end module name
01000000 0101f000 calc (deferred)
.clients
\Admin (npipe \.\pipe\debugPipe), last active Wed Jul 22 11:54:19 2015
HostMachine\HostUser, last active Wed Jul 22 11:44:06 2015
0:000> kb
ChildEBP RetAddr Args to Child
0007fb1c 7c9402ed 7ffde000 7ffdf000 00000000 ntdll!DbgBreakPoint
0007fc94 7c91fad7 0007fd30 7c900000 0007fce0 ntdll!LdrpInitializeProcess+0x1014
0007fd1c 7c90e457 0007fd30 7c900000 00000000 ntdll!_LdrpInitialize+0x183
00000000 00000000 00000000 00000000 00000000 ntdll!KiUserApcDispatcher+0x7
0:000> .echo "only echo is echoed all other aw are dumped here"
only echo is echoed all other aw are dumped here
添加了屏幕截图以防所写内容听起来乱七八糟