如何自动调试过程?
我有一个WinDbg脚本,其中包含一些基本命令,当我附加到WinDbg的进程/应用程序中发生 break 时,我想运行这些命令。 我如何知道WinDbg中断,以及如何自动启动脚本?
答案 0 :(得分:2)
设置断点以运行任何windbg命令时,可以使用命令字符串选项。让它运行你的脚本。
类似的东西:
bp <address to set break> "$$><c:\\temp\\dbgscript.txt;g"
我相信你应该能够用sx命令做同样的事情,如果你的意思是“在抛出异常的时候”,“当进程中发生中断时”。
答案 1 :(得分:2)
Python示例:
from pykd import *
def bpCallback():
if is64bitSystem():
objAttr = typedVar( "ntdll", "_OBJECT_ATTRIBUTES", reg("r8") )
else:
objAttr = typedVar( "ntdll", "_OBJECT_ATTRIBUTES", ptrPtr(reg("esp") + 0xC) )
name = loadUnicodeString( objAttr.ObjectName )
dprintln( "NtCreateFile: " + name )
return DEBUG_STATUS_GO_HANDLED
if not isWindbgExt():
startProcess("notepad.exe")
if not isDumpAnalyzing() and not isKernelDebugging():
nt = loadModule("ntdll")
b1 = bp( nt.NtCreateFile, bpCallback )
# wait for user break, exceptions or process exit
go()
dprintln( "stopped" )
else:
dprintln( "The debugger must be connected to live usermode process" )
windbg的Python扩展可以在这里获取: pykd.codeplex.com
答案 2 :(得分:1)
您是否正在运行已连接windbg的应用程序,或者您正在进行JIT调试?如果是后者(即,您依赖于HKLM \ Softare \ Microsoft \ Windows NT \ AEDebug \ Debugger中的设置),则只需修改Debugger键的值即可使用“-c”命令运行命令后调试器附加。
假设前者,那么您可以尝试使用命名管道或tcp(使用.server命令)启动调试服务器。然后,您可以编写一个控制台应用程序来启动cdb实例作为客户端连接到上述windbg服务器并让应用程序解析stdout直到您看到调试器提示符。然后,您可以从那时起有效地自动化调试会话。因此,它减少了一个解析练习,可能包含在FSM中,具体取决于你想要的复杂程度。