首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cdb (windbg命令行)保持会话之间的断点?

如何使用cdb (windbg命令行)保持会话之间的断点?
EN

Stack Overflow用户
提问于 2020-03-23 03:26:08
回答 1查看 245关注 0票数 1

我的目标是在CDB (命令行版本的windbg)中的调试会话之间保持断点。我可以通过使用.restart正确地重新启动,但是我总是丢失我的断点(我使用bu和/或bm命令设置我的断点。

如果只使用国开行,还可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-23 06:43:46

cdb不可能在.bpcmds之前使用.restart,并在重新启动后保存到某个地方并重用它。

对于windbg,可以使用工作区在会话之间保存断点。

编辑演示

假设你有这些断点

代码语言:javascript
复制
0:000> bl
 0 e 00007ff6`0fc4109c     0001 (0001)  0:**** calc!wWinMain
 1 e 00007ff6`0fc41820     0001 (0001)  0:**** calc!wWinMainCRTStartup
 2 e 00007ff6`0fc41960     0001 (0001)  0:**** calc!matherr
 3 e 00007ffb`f033d880     0001 (0001)  0:**** ntdll!NtCreateTimer2
 4 e 00007ffb`f033d6a0     0001 (0001)  0:**** ntdll!NtCreateNamedPipeFile
 5 e 00007ffb`f02a2000     0001 (0001)  0:**** ntdll!RtlDefaultNpAcl+0x190
 6 e 00007ffb`ede53000     0001 (0001)  0:**** KERNELBASE!EnumDynamicTimeZoneInformation+0x60

.bpcmds将向您展示如何设置它们(最后两个是基于rva的符号少bps )

如果你用bp设置它们,那么下一次它们可能就不能工作了。

由于模块可能被加载到不同的地址,所以需要使用ASLR。

代码语言:javascript
复制
0:000> .bpcmds
bu0 calc!wWinMain;
bu1 calc!wWinMainCRTStartup;
bu2 calc!wsetargv;
bu3 ntdll!ZwCreateTimer2;
bu4 ntdll!ZwCreateNamedPipeFile;
bu5 ntdll+2000;
bu6 kernelbase+3000;
0:000>  

将粘贴复制到一些划痕空间,然后复制粘贴回cdb控制台。

您可以使用.logopen {some_path_to_some_textfile} do .bpcmds和.restart也可以使用

在本例中,您可以从日志文件复制粘贴bps,并且不必再次打开日志文件,因为windbg/cdb不会在.restart上关闭日志文件。

这里是.restart也被捕获到日志文件

代码语言:javascript
复制
bu6 kernelbase+3000;
0:000> .restart
CommandLine: calc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60807587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档