【问题标题】:Is there any way to display all the functions called by an executable in WinDBG (not just call stack)?有什么方法可以显示 WinDBG 中可执行文件调用的所有函数(不仅仅是调用堆栈)?
【发布时间】:2020-11-03 16:48:32
【问题描述】:

我正在尝试使用 WinDbg 调试一个不能正常工作的可执行文件(没有收到分段错误,它只是没有做他应该做的)。我想看到一个调用堆栈,其中包含在运行可执行文件时调用的所有函数。这在 WinDbg 或任何其他调试器中是否可行?

【问题讨论】:

  • 什么是所有被调用的函数
  • 程序经过的所有功能
  • 您可以查看wt 以开始跟踪您的呼叫。请注意,只有在可以解析符号时才能获得函数名称,否则只会获得地址。您可以查看tc 转储特定数量的呼叫。这不是一个完全无用的练习。我以前用过trace a parameter passed to msg.exe
  • 在返回地址上设置断点,使用wt或者watch and trace可以给你一个非常详细的调用流程总结
  • 即使 RbMm 最终可能是正确的,我想每个开发人员都有一段时间想要这样做 - 我认为这是合法的。正如 Lieven 所说,使用wt。但是 - 也许帮自己一个忙,先用一个简单的应用程序,比如 calc.exe 试试。如果您从初始断点开始执行此操作,您会注意到启动需要大约 20 分钟,而不是毫秒

标签: c windows windbg


【解决方案1】:

是的,正如我所说,使用 wt(监视和跟踪)
Read the docs 它可以通过多种方式进行配置
只喜欢一级调用
最多只能调用第 n 级
仅在特定模块中
仅在主模块等中

下面是 ntdll 中跨越 um-km 边界的函数的简单跟踪

0:000> u . l1
ntdll!LdrpInitializeProcess+0x11bf:
76ff6113 e870fffdff      call    ntdll!NtQueryInformationProcess (76fd6088)

0:000> bp .+5  //set a bp on return address
0:000> bl
 0 e 76ff6118     0001 (0001)  0:**** ntdll!LdrpInitializeProcess+0x11c4

0:000> wt
    2     0 [  0] ntdll!NtQueryInformationProcess
   27     0 [  0] aswhook
    1     0 [  1]   aswhook
   28     1 [  0] aswhook
    1     0 [  1]   0x6efc0480
    1     0 [  1]   0x6efc0485
    2     0 [  1]   ntdll!NtQueryInformationProcess
    2     0 [  2]     ntdll!KiFastSystemCall
    1     0 [  1]   ntdll!NtQueryInformationProcess
   46     8 [  0] aswhook
    3     0 [  1]   aswhook

Breakpoint 0 hit
eax=00000000 ebx=7ffdf000 ecx=e8cb8789 edx=ffffffff esi=ffffffff edi=00000000
eip=76ff6118 esp=0018f59c ebp=0018f6f4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!LdrpInitializeProcess+0x11c4:
76ff6118 85c0            test    eax,eax
0:000>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2014-11-13
    • 2016-06-03
    • 2021-12-06
    • 1970-01-01
    • 2011-10-31
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多