问题描述
windbg 命令 tct 执行程序,直到到达 If ListBox1.Selectedindex > -1 Then
For Each Item As Object In ListBox1.SelectedItems
Dim ItemSelected = CType(ListBox1.SelectedItem.Item("Path"),String)
SearchFolder = ItemSelected
Dim dirInfo As New IO.DirectoryInfo(SearchFolder)
Dim files As IO.FileInfo() = dirInfo.GetFiles()
Dim file As IO.FileInfo
docImage = (ImageList1.Images.Count - 1)
Dim items As New List(Of ListViewItem)
For Each file In files
Dim filename As String = file.Name.ToString
If file.Extension = ".pdf" Then
foundList = PDFManipulation.GetTextFromPDF2(SearchFolder + filename,SearchRegX)
If foundList = True Then
items.Add(New ListViewItem(New String() {"",filename.ToString},docImage))
End If
End If
Next
ListView1.Items.AddRange(items.ToArray)
Next
End If
指令或 call
指令。我想知道调试器如何在幕后实现此功能。
我可以想象调试器从当前指令扫描下一个 ret
或 call
的指令,并根据找到的指令设置断点。但是,我认为这不太可能,因为它还必须考虑 ret
指令,以便有任意数量的可能的 jmp
或 call
指令,这样的断点必须设置。
另一方面,我想知道 x86/x64 cpu 是否提供了一种功能,当 cpu 即将处理 ret
或 call
指令时,该功能会引发异常以供调试器捕获。然而,我还没有听说过这样的功能。
解决方法
我猜它会重复单步执行,直到下一条指令是 call 或 ret,而不是试图找出在哪里设置断点。 (在一般情况下,这可能与解决停机问题一样困难。)
通过向前扫描“直线”代码并在下一个 Selenium
/jmp
/jcc
或其他控制转移指令(例如loop
),并捕获可以将控制权转移到 SEH 处理程序的信号/异常。
我也不知道有任何硬件支持中断某种类型的指令或操作码:the x86 debug registers DR0..7 允许在代码地址处设置硬件断点,而无需将机器代码重写为 xabort
,还有硬件观察点(将数据加载/存储捕获到特定地址或地址范围)。但不是按操作码过滤。