gpt4 book ai didi

c++ - Windows在创建进程时如何通过ANSI命令行?

转载 作者:行者123 更新时间:2023-11-27 23:09:35 27 4
gpt4 key购买 nike

在进程初始化期间,Windows 设置了 PEB structure其中包括一个结构 RTL_USER_PROCESS_PARAMETERS,它又指向命令行的 UNICODE 版本。
您也可以使用 GetCommandLineW 访问它。

GetCommandLineA 返回 ANSI 版本并(显然)指向不同的地址。

我的问题是,windows是否在进程创建时初始化了这两个版本,如果有的话,哪个数据结构指向命令行的ANSI版本?另外,除了调用 GetCommandLineA 来检索它之外,还有其他方法吗?

谢谢

最佳答案

我在 Windows 7 上反汇编了 Kernel32,发现在进程启动期间,它访问进程的 PEB 中的 Unicode 命令行,并将指向该字符数据的指针存储在 GetCommandLineW( ) 返回。它还将该 Unicode 数据转换为一个单独的 Ansi 缓冲区,GetCommandLineA() 返回一个指向该缓冲区的指针。据我所知,Ansi 缓冲区是内核模块私有(private)的,它不存储在 PEB 中,因此您不太可能跨进程边界访问 Ansi 缓冲区,例如你可以使用 Unicode 缓冲区。

关于c++ - Windows在创建进程时如何通过ANSI命令行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21102303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com