Windows 如何从nt.sys和w32k.sys中的内存地址解析符号

Windows 如何从nt.sys和w32k.sys中的内存地址解析符号,windows,system-calls,etw,Windows,System Calls,Etw,在64位版本的Windows 7/8/2012中,ETW内核跟踪程序为系统调用输入事件提供内存地址。我希望将这些地址映射到一些有意义的内容,例如位于该地址的函数的名称:例如AcceptConnectPort 我知道我可以在内核调试器会话中使用ln(列出最近的符号)来查找特定地址处的符号。我想要的是一种以编程方式实现这一点的方法。有没有一个库可以用来查找给定内存地址的符号 更好的是,对于不同Windows版本的内存偏移量是否有权威的参考。我找到了,但这些数字似乎与我观察到的任何内存地址都不对应。过

在64位版本的Windows 7/8/2012中,ETW内核跟踪程序为系统调用输入事件提供内存地址。我希望将这些地址映射到一些有意义的内容,例如位于该地址的函数的名称:例如AcceptConnectPort

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


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

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


我已经离开了,所以我没有权限查看该项目的源代码,但这是一个很好的开始。

你看过Dependency Walker(Dependency.exe)了吗主页www.dependencywalker.com您可以使用DbgHelp库从Microsoft symbol server获取适当的符号并进行查找-是否有任何已发布的函数地址列表(官方或非官方)值得怀疑。这将是巨大的,因为每次Windows更新时,模块中的地址都会改变。@Marichyasana Dependency Walker看起来很有希望,但程序中显示的入口点似乎与我在内核跟踪中观察到的任何偏移量都不对应。@AndrewMedico我认为DbgHelp是这里的关键。谢谢你的参考。这看起来很有用,但我正在使用的代码是用C#编写的。看起来我需要做一些工作来与API接口。事实证明,还有一个用于调试帮助的命令行界面,它包含在Windows调试工具中。