有什么方法可以查看正在运行的Windows进程的激活上下文吗?
理想情况下,当我说"查看"时,我的意思是以人类可读的方式检查它,例如查看/确认已加载的 DLL 等。
我的想象是,某种调试器可能会附加到正在运行的进程,然后显示该信息。但是任何类型的工具都可能有用 - 调试器,日志文件,甚至使用激活上下文API来检查事物等。
检索激活上下文详细信息的基本方法之一是使用QueryActCtxW()
API。此 API 可用于查询一堆详细信息。这里提供了一个很好的示例。
在示例代码中,请注意以下行。
// Request the first file in the root assembly
QueryIndex.ulAssemblyIndex = 1;
只要 API 返回成功,就可以通过递增ulAssemblyIndex
的值来重复调用QueryActCtxW()
API。每次成功的调用都将返回由ulAssemblyIndex
表示的程序集的请求详细信息。
当从进程内调用QueryActCtxW()
时,上面将起作用。
现在,如果要获取另一个进程的详细信息,一个想法是将激活上下文检索逻辑包装在 DLL 中。DLL 可以将详细信息转储到磁盘文件或将其通过管道传送到查看器。然后通过 DLL 注入等技术或使用 CreateRemoteThread(( API 将此 DLL 注入到给定进程中。