我的目标是在CDB (命令行版本的windbg)中的调试会话之间保持断点。我可以通过使用.restart正确地重新启动,但是我总是丢失我的断点(我使用bu和/或bm命令设置我的断点。
如果只使用国开行,还可能吗?
发布于 2020-03-23 06:43:46
cdb不可能在.bpcmds之前使用.restart,并在重新启动后保存到某个地方并重用它。
对于windbg,可以使用工作区在会话之间保存断点。
编辑演示
假设你有这些断点
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。
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也被捕获到日志文件
bu6 kernelbase+3000;
0:000> .restart
CommandLine: calchttps://stackoverflow.com/questions/60807587
复制相似问题