修改命令行参数

问题描述 投票:1回答:3

我有一个Win32 C ++应用程序,我需要在该应用程序中修改命令行参数。具体来说,我想以GetCommandLineW()返回我的新参数的方式来编辑命令行参数。

信不信由你,这行得通(因为我们有一个指向字符数组的非常量指针):

LPTSTR args = GetCommandLineW();
LPTSTR new_args = L"foo --bar=baz";
wmemcpy(args, new_args, lstrlenW(new_args));

// ...
LPTSTR args2 = GetGommentLineW(); // <- equals "foo --bar=baz"

但是我不知道Windows为LPTSTR提供的GetCommandLineW()分配了多少内存。

还有另一种方法吗?还是有人知道命令行参数是否分配了可预测的内存量?

c++ winapi command-line
3个回答
5
投票

GetCommandLineW()不分配任何内存。创建进程时,它仅返回指向由OS在进程的PEB结构中分配的缓冲区的指针。该缓冲区在整个过程的生命周期中都存在。


0
投票

修改该函数返回的内容的最干净,最安全的方法是修改该函数。安装一个绕道,以便从您的进程内部对函数的所有调用都重新路由到您提供的函数。


0
投票

使用以下代码检查PEB(unicode)字符串所在的PEB结构。

在我的机器上,在x86和x64下,CommandLine就在CommandLine之后,因此我认为前者也不会有更多空间。向该缓冲区写入更长的字符串可能会导致溢出。

ImagePathName
© www.soinside.com 2019 - 2024. All rights reserved.