【问题标题】:Stepping over system/windows DLL跳过系统/Windows DLL
【发布时间】:2015-11-30 18:43:59
【问题描述】:

我在 WinDbg 中使用以下命令:

pc;z(eax !=12345543)

这将在任何调用指令处中断,然后自动恢复执行(通过单步执行被调用函数)。 问题是,我不想进入 Windows/系统模块,因为我对它们不感兴趣。 所以每当有一个windows/system函数被调用时,只需跳过。

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

【问题讨论】:

  • “只调试我的代码”用于 WinDbg...
  • 我认为这是 Visual Studio 设置。我正在使用独立的 WinDbg。
  • 我原以为pc 会跳过通话,而tc 会跳过通话。

标签: debugging windbg


【解决方案1】:

设置.step_filter "filterlist"

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

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(Step over) 然后继续直到下一次调用 tc 是 t(Step in) 然后继续直到下一次调用

即使作为示例,您在 z() 中的表达式也是模糊的 pc 将停止在 call 指令上,如 call 10345 , call ntdll!foo 等

您在寻找 call eax 指令吗?

【讨论】:

  • 我有一个导入大约 40 个自定义 DLL 的应用程序。我想要实现的是,我想将所有函数调用记录在一个文件中,但没有 Windows 调用。通过这样做,我希望我能更好地了解代码路径。
  • 好吧,如果您想查看执行流程,请使用 wt(监视和跟踪)命令,它包含包含和排除列表,您可以设置条目级别(不要输入任何第三级调用)iirc我写了一个答案how to use wt reverseengineering.stackexchange.com/questions/6603/… 看看
  • 好吧,我正在使用 wt -ni -intdll ,但我仍然看不到我的自定义函数。我的程序包含 3 个自定义函数,但我在 wt 中看到的只是 ntdll 调用。这背后的原因是什么?
  • 大多数时候你无法逃避 ntdll 忽略 ntdll 通常会导致二进制文件的完整执行,例如如果调用 ntdll!ZwContinue 调用的返回地址不是控件在执行后返回的位置它返回到 context->eip 在这种情况下,如果您认为您需要了解从头到尾的所有内容,那么跟踪是不可行的
猜你喜欢
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多