【问题标题】:How to resolve symbols from memory addresses in nt.sys and w32k.sys如何从 nt.sys 和 w32k.sys 中的内存地址解析符号
【发布时间】:2014-05-24 14:03:49
【问题描述】:

在 Windows 7/8/2012 的 64 位版本中,ETW 内核跟踪器为系统调用进入事件提供内存地址。我想将这些地址映射到一些有意义的东西,比如位于该地址的函数的名称:例如接受连接端口。

我知道我可以在内核调试器会话中使用ln(列出最近的符号)来查找特定地址的符号。我想要的是一种以编程方式做到这一点的方法。有没有可以用来在给定内存地址查找符号的库?

更好的是,是否有针对不同 Windows 版本的内存偏移量的权威参考。我找到了this table,但这些数字似乎与我观察到的任何内存地址都不对应。

【问题讨论】:

  • 你看过 Dependency Walker (depends.exe) 主页 www.dependencywalker.com
  • 您可以使用 DbgHelp 库从 Microsoft 符号服务器获取适当的符号并进行查找 - msdn.microsoft.com/en-us/library/windows/desktop/…
  • 功能地址是否公开(官方或非官方)列表值得怀疑。这将是巨大的,因为每次 Windows 更新发生时模块中的地址都会发生变化。
  • @Marichyasana Dependency Walker 看起来很有希望,但程序中显示的入口点似乎与我在内核跟踪中观察到的任何偏移都不对应。
  • @AndrewMedico 我认为 DbgHelp 是这里的关键。感谢您的参考。

标签: windows system-calls etw


【解决方案1】:

过去,我曾参与过一个需要这样做的项目。我们使用 Andrew 在评论中提到的 DbgHelp API 下载相关的 .PDB 文件并在其中查找我们需要的偏移量。

此后我继续前进,因此我无权查看该项目的源代码,但this page 是一个不错的起点。

【讨论】:

  • 这看起来很有用,但我正在使用的代码是用 C# 编写的。看起来我需要做一些工作来与 API 交互。
  • 事实证明,还有一个用于 DebugHelp 的命令行界面 dbg.exe,它包含在 Windows 调试工具中。
猜你喜欢
  • 2015-03-23
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2017-01-18
  • 2012-12-25
  • 1970-01-01
相关资源
最近更新 更多