Debugging 跨过系统/windows DLL

Debugging 跨过系统/windows DLL,debugging,windbg,Debugging,Windbg,我正在WinDbg中使用以下命令: pc;z(eax !=12345543) 这将在任何调用指令处中断,然后自动恢复执行(通过单步执行被调用的函数)。 问题是,我不想进入windows/system模块,因为我对它们不感兴趣。 因此,只要有一个windows/system函数被调用,只需跳过 有人知道如何在WinDbg中实现这一点吗?设置。步骤过滤器“filterlist” 这是一个场景,我在第一次调用ntdll时停止!ZwContinue from系统断点 0:000> .restar

我正在WinDbg中使用以下命令:

pc;z(eax !=12345543)
这将在任何调用指令处中断,然后自动恢复执行(通过单步执行被调用的函数)。 问题是,我不想进入windows/system模块,因为我对它们不感兴趣。 因此,只要有一个windows/system函数被调用,只需跳过

有人知道如何在WinDbg中实现这一点吗?

设置
。步骤过滤器“filterlist”

这是一个场景,我在第一次调用ntdll时停止!ZwContinue from系统断点

0:000> .restart
CommandLine: calc

(6d4.ba4): Break instruction exception - code 80000003 (first chance)

ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:000> .step_filter "ntdll!_*;ntdll!l*"
Filter out code symbols matching:
  ntdll!_*
  ntdll!l*
0:000> pc

ntdll!KiUserApcDispatcher+0xa:
7c90e45a e8ffebffff      call    ntdll!ZwContinue (7c90d05e)
也就是说,您对pc的描述不正确pc不进入呼叫,它在呼叫过程中分步并在下一次呼叫时停止,如果您需要进入使用tc,请注意这两个命令都会开始执行目标

pc为p(跳过),然后继续,直到下一次呼叫 tc是t(步进),然后是继续,直到下一次呼叫

即使作为一个例子,z()中的表达式也是模糊的 pc将在调用指令时停止,如调用10345、调用ntdll!富等

您正在寻找呼叫eax指令吗?

设置
。步骤过滤器“filterlist”

这是一个场景,我在第一次调用ntdll时停止!ZwContinue from系统断点

0:000> .restart
CommandLine: calc

(6d4.ba4): Break instruction exception - code 80000003 (first chance)

ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:000> .step_filter "ntdll!_*;ntdll!l*"
Filter out code symbols matching:
  ntdll!_*
  ntdll!l*
0:000> pc

ntdll!KiUserApcDispatcher+0xa:
7c90e45a e8ffebffff      call    ntdll!ZwContinue (7c90d05e)
也就是说,您对pc的描述不正确pc不进入呼叫,它在呼叫过程中分步并在下一次呼叫时停止,如果您需要进入使用tc,请注意这两个命令都会开始执行目标

pc为p(跳过),然后继续,直到下一次呼叫 tc是t(步进),然后是继续,直到下一次呼叫

即使作为一个例子,z()中的表达式也是模糊的 pc将在调用指令时停止,如调用10345、调用ntdll!富等


您正在寻找调用eax指令吗?

WinDbg的“只调试我的代码”…我认为这是Visual Studio设置。我使用的是WinDbg单机版。我本以为
pc
会跳过调用,
tc
会介入调用。WinDbg的“只调试我的代码”…我认为这是Visual Studio设置。我正在使用WinDbg standalone。我本以为
pc
会跳过调用,而
tc
会介入调用。我有一个应用程序导入了大约40个自定义DLL。我想实现的是,我想将所有函数调用记录在一个文件中,但不记录windows调用。通过这样做,我希望我能更好地了解代码路径。如果你想观察执行流,使用wt(watch and trace)命令,它有包含列表和排除列表,你可以设置输入级别(不要输入任何第三级调用)iirc我写了一个答案如何使用wt看看好的,我正在使用wt-ni-intdll,但是我仍然看不到我的自定义函数。我的程序包含3个自定义函数,但我在wt中看到的只是ntdll调用。。这背后的原因可能是什么?大多数情况下,您无法逃避ntdll忽略ntdll通常会导致完全执行二进制文件,例如,如果ntdll!调用ZwContinue调用的返回地址不在控件执行后返回的位置,它返回到上下文->eip在这种情况下,如果您认为需要了解从开始到结束的所有信息,则无法跟踪。专门用于api Monitor等情况的应用程序有一个导入大约40个自定义DLL的应用程序。我想实现的是,我想将所有函数调用记录在一个文件中,但不记录windows调用。通过这样做,我希望我能更好地了解代码路径。如果你想观察执行流,使用wt(watch and trace)命令,它有包含列表和排除列表,你可以设置输入级别(不要输入任何第三级调用)iirc我写了一个答案如何使用wt看看好的,我正在使用wt-ni-intdll,但是我仍然看不到我的自定义函数。我的程序包含3个自定义函数,但我在wt中看到的只是ntdll调用。。这背后的原因可能是什么?大多数情况下,您无法逃避ntdll忽略ntdll通常会导致完全执行二进制文件,例如,如果ntdll!调用ZwContinue调用的返回地址不在控件执行后返回的位置它返回到上下文->eip在这种情况下,如果您认为需要了解从开始到结束的所有信息,则无法跟踪专门用于api监视器等情况的应用程序