gpt4 book ai didi

windows - 如何防止 WinDbg 附加到特定的子进程?

转载 作者:可可西里 更新时间:2023-11-01 09:19:58 28 4
gpt4 key购买 nike

我正在使用 .childdbg 1 在 WinDbg 中调试脚本。 (脚本在无限循环中运行软件的各种测试用例。这样我就可以捕捉到罕见的崩溃。)

我不需要附加到特定的子进程(出于性能原因并且因为它们是第三方的并且经常崩溃)。

如果我可以通过进程名称指定它们,那将解决我的问题。如果您能提出其他可以满足我需要的调试器,我将不胜感激。

注意:将调试器配置为通过 GFlags 附加到特定进程并不是这种特定情况下的解决方案。

最佳答案

如果你激活了.childdbg 1,你可以使用sxe cpr。使用 -c 开关,您可以执行命令。像 .if (yourcondition) {.detach} .else {g} 这样的东西可能会有所帮助。

也许 cpr:ProcessName 选项对您真的很有帮助。它支持通配符过滤器。直到现在我才使用它,请参阅 WinDbg 帮助中的控制异常和事件

我使用了以下 .NET 程序来执行测试:

static void Main()
{
Console.WriteLine("Attach and press Enter");
Console.ReadLine();
Process.Start("Notepad.exe");
Process.Start("calc.exe");
Process.Start("Notepad.exe");
Process.Start("calc.exe");
Console.WriteLine("Started 4 processes");
Console.ReadLine();
}

我在调试器下启动程序并执行了以下操作:

0:004> .childdbg 1
Processes created by the current process will be debugged
0:004> sxe -c ".detach;g" cpr:calc
0:004> g
...
77da12fb cc int 3
1:009> |
0 id: 1fe0 create name: DebugChildProcesses.exe
. 1 id: f60 child name: notepad.exe
1:009> g
...
77da12fb cc int 3
2:011> |
0 id: 1fe0 create name: DebugChildProcesses.exe
1 id: f60 child name: notepad.exe
. 2 id: 1d68 child name: notepad.exe
2:011> g

如您所见,调试器仅附加到记事本。

不幸的是,您不能使用多个 sxe cpr:process 命令。每当您再次使用它时,它将覆盖之前的设置。

在这种情况下,您需要使用通用的 CPR 处理程序并在命令中完成其余的工作。在我的测试中,!peb 当时效果不佳,所以我无法使用它。但是,WinDbg 已经切换到该进程,因此 |. 为我们提供了进程名称以及一些其他信息。要仅提取进程名称,.foreach/pS 6 (token {|.}) { .echo ${token}} 对我有用。

有了这个,你可以构建更棘手的命令,比如

.foreach /pS 6 (token {|.}) { 
.if (0==$scmp("${token}","notepad.exe")) {.echo "It's Notepad!"}
.elsif (0==$scmp("${token}","calc.exe")) {.echo "Do some math!"}
}

(为便于阅读而格式化,删除换行符)

当您尝试将它与 sxe 结合使用时,您会遇到一些讨厌的字符串转义问题。用 \" 替换命令中的所有引号以使其工作:

sxe -c"
.foreach /pS 6 (token {|.}) {
.if (0==$scmp(\"${token}\",\"notepad.exe\")) {.echo \"It's Notepad!\"}
.elsif (0==$scmp(\"${token}\",\"calc.exe\")) {.echo \"Do some math!\"}
}
" cpr

(为便于阅读而格式化,删除换行符)

现在你可以做任何你喜欢的事,例如.detach.kill,只需替换上面例子中的.echo命令即可。您可以像往常一样通过分号 (;) 分隔命令来执行多个命令。

顺便说一句:如果您使用 sxe cpr,您可能希望通过 sxd ibp 关闭初始进程断点。

关于windows - 如何防止 WinDbg 附加到特定的子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com