【发布时间】:2012-03-10 21:43:12
【问题描述】:
我想遍历 x64 进程的堆栈。
我读到为了这样做,我需要获取存储在 exe 或 DLL 中的展开信息。
我已经看到有一个RtlAddFunctionTable,但我首先可以找到任何方法来获取这个函数表......
我该怎么做?
【问题讨论】:
标签: c++ windows 64-bit stack-trace
我想遍历 x64 进程的堆栈。
我读到为了这样做,我需要获取存储在 exe 或 DLL 中的展开信息。
我已经看到有一个RtlAddFunctionTable,但我首先可以找到任何方法来获取这个函数表......
我该怎么做?
【问题讨论】:
标签: c++ windows 64-bit stack-trace
你见过StackWalk64吗?
【讨论】:
您还可以使用 64 位版本的 WinDbg,它作为 DDK/SDK http://msdn.microsoft.com/en-us/windows/hardware/gg463009 的一部分提供。
附加后,您可以加载 windows 符号:
.symfix;.reload;
您也可以将它指向您的应用程序 pdb,只要您的 pdb 没有从发布版本中删除私有符号,您就应该能够看到完整的调用堆栈。
【讨论】:
您可以使用 RtlLookupFunctionEntry (https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-rtllookupfunctionentry) 获取与特定代码地址关联的函数表条目 (struct RUNTIME_FUNCTION)。
【讨论】: