显示与 Process Explorer 相同的详细信息
您提供的屏幕截图似乎是 Process Explorer 的屏幕截图,而不是任务管理器的屏幕截图。这使事情变得更加复杂,因为(如果我没记错的话)Process Explorer 使用内核驱动程序来获取有关系统的详细信息,以便比 Windows 更精确地计算 CPU 时间。
我手头没有这本书,但这应该在Windows Sysinternals Administrator's Reference 中描述。
将起始地址转换为 DLL 和方法
起始地址,顾名思义,是一个地址。通常它会以十六进制格式显示,但实际上它只是一个数字,所以在你的情况下它可能是数字。转成Hex没问题。
如果你想把数字变成有用的东西,比如 DLL 名称和方法名称,你需要使用符号。看你的截图:Process Explorer 还需要下载符号,否则偏移量是从 DLL 开始计算的(如van.dll+1c904)。
为了处理符号,Process Explorer 使用了一个名为dbghelp.dll 的Microsoft DLL。你已经在Options/Configure symbols... 中配置了它。如果愿意,您可以使用相同的 DLL,但我会说这是您停止使用 Powershell 的地方,因为dbghelp.dll 是本机 DLL,.NET 不能使用。您甚至无法在 Visual Studio 中创建 .NET 互操作程序集,因为它不是 COM DLL。
此外,Process Explorer 对起始地址的显示值应用了另一种魔法:通常起始地址总是相同的:一些 Microsoft 代码创建一个 Thread 对象,然后调用应用程序特定的代码。 Process Explorer 沿堆栈跟踪向上走,并在调用堆栈上显示第一个非 Microsoft 帧。我不确定 WMI 转过来的地址是否考虑了同样的事情。
如果你想试试dbghelp.dll,地址转换为DLL的方法应该是IDebugSymbols::GetNameByOffset()。
还要注意,从地址到方法的转换需要在远程机器上完成,因为只有远程机器才能知道加载了哪个确切版本的 DLL。然后,还要考虑远程计算机需要 Internet 访问才能从 Microsoft 服务器下载符号。
远程执行
在您提到您想在远程计算机上执行命令的评论中。
Process Explorer 不支持远程机器。虽然我不确定原因,但我的猜测是它只能通过 WMI 访问远程 PC - 因此会遇到与您相同的限制。
但是,有一些alternatives to Process Explorer, discussed in the Process Explorer Forum。它们似乎也受到 WMI 限制的影响,但您可以尝试一下。
除此之外,您还可以使用SysInternals PsExec 在远程机器上执行程序。
总体结论
我想预期的解决方案过于复杂,无法在 StackOverflow 上回答,尤其是在工具集仅限于 Powershell 的情况下。它至少需要 C++ 来集成 dbghelp.dll 和 PSExec 来访问远程机器。