【问题标题】:NtQueryInformationProcess seems to return wrong command lineNtQueryInformationProcess 似乎返回错误的命令行
【发布时间】:2012-05-22 15:25:58
【问题描述】:

我在 Windows 7 上使用NtQueryInformationProcess() 检索另一个进程的命令行(通过 NtQueryInformationProcess() 返回的 PEB 中的RTL_USER_PROCESS_PARAMETERS)。

这通常可以正常工作,但是当启动同一可执行文件的多个实例时,所有实例的命令行字符串都是相同的:它始终是启动的第一个实例的命令行。 GetCommandLine() 为每个进程返回正确的命令行。

有人可以证实或伪造这一点吗?

【问题讨论】:

    标签: command-line instances ntdll


    【解决方案1】:

    您可能缺少的是PEB中的每个指针仅与PEB进程的地址空间相关,而不是调用NtQueryInformationProcess并检索PEB的进程。您必须使用 ReadProcessMemory 来引用指针。否则,由于进程的布局可能类似,您最终会读取 NtQueryInformationProcess 调用者的命令行,而不是 PEB 进程的命令行。

    我可以确认,对每一级指针间接使用 NtQueryInformationProcess 和 ReadProcessMemory 可以正确获取所有进程的命令行。源代码示例见https://stackoverflow.com/a/13408150/1236546

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 2023-03-14
      • 2014-04-04
      • 1970-01-01
      • 2011-04-12
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多